黑马程序员——点语法、description、SEL、id使用
黑马程序员——点语法、description、SEL、id使用
点语法介绍与使用
**p.age;**
对象.属性名
注意:此时,(对象.属性名)并不是直接访问实例变量。而是看到点语法后,会帮我们自动替换成p.age=18-替换-> [p setAge:18];
*************************
int a=p.age;//调用get方法
注意:当看到p.age出现在等号右侧的时候,会自动替换成p.age--替换-->[p age];
强调:p.age到底是替换成get还是set方法,一般取决于p.age出现在等号左侧还是右侧(是设置值还是赋值)
死循环:
set方法:
- (void) setAge:(int)newAge {
// 下面的代码会引发死循环
self.age = newAge;
}
相当于
- (void) setAge:(int)newAge {
[self setAge:newAge];
}
死循环:
在get方法中,return self.age相当于[self age];
********************************
description方法介绍及重写
当以%@的格式,打印对象或类,此时调用了对象的description方法。对象中如果没有重写父类的description方法,则调用父类的
********************************
SEL 方法的存储位置
是对方法的包装,包装成SEL类型数据
根据SEL数据找到对应的方法地址
根据方法地址调用相应的方法
例:把test方法包装成SEL类型
SEL s1 = @selector(test);
使用:
[p performSelector:test];
*********************************
强制类型转换例:
NSObject *obj=[Animal new];
[(Animal*)obj run];
[(子类名*)指针名 行为]
*********************************
id使用:
不需要强制类型转换,可直接使用,认为是动态类型,编译器在检查类型。
id obj;
obj=dog;
[obj run]
相当于NSObject *
instancetype与id
相同:都可以作为方法的返回类型
不同:
instancetype可以返回和方法类型相同的对象。id只能返回未知类型的对象
instancetype只能作为返回值,id还可以作为参数