1 OC传统get和set方法
2点语法
只能使用点语法设置成员变量(get和set方法),不能访问其他方法。
Person *p = [Person new];
赋值:p.name=“xiaoming”; //(xcode优化)访问的是成员变量set方法。
取值:int a =p.age; // 访问的是成员变量get方法。
注意
1) 在set和get方法中不能使用 self.age =age 设置_age 值,会不断调用自己造成死循环。和JAVA中的this指针有区别 java 中可以使用 this.age=age;
2) 点语法的本质是set和get方法的调用不是访问成员变量。
3 @property
是编译器指令,告诉编译器声明属性的访问器(声明get和set方法)。
使用
@property 类型名 方法名(规范写法下,成员变量名去掉下划线)。
@property int age; //相当于_age 的set和get方法的声明。
注意
1) 只能写在声明的地方 @interface 和@end之间。
2) 类型一致可以写在一起 @property int age ,weight。
@property 的增强使用
xcode 4.4 之后 只需要声明使用@property 声明 Xcode会自动实现。
@property int age ;//声明的是_age的set和get方法 实现的也是_age的set和get方法。如果没有_age 会自动生成。可以被子类继承。
4 @synthesize
是编译器指令,告诉编译器实现属性的访问器(实现get和set方法)。
使用
@synthesize age ; //相当于实现了 声明的方法为age的get和set方法。
但是get和set方法操作的不是_age这个实例变量
注意
方法名必须先@property中声明。
多个实例变量可以放在一行 建议只把类型一致的写在一起。
@synthesize age weight name;
指定实例变量赋值
@synthesize age=_age ; //默认操的是下划线的_age。
5 @property set和get方法的重写
和手动实现set和get方法一样。
6 动态类型和静态类型
动态类型:程序执行的时候才知道所属类型。
静态类型;将一个变量定义为特定类的对象。编译的时候就知道变量的类型。
7 id类型
NSObject 访问子类的方法。
NSObject是所有类的基类。NSObject 指针可以指向任何类对象。
id是通用的对象类型,可以存储任何类对象,万能指针。
使用
id obj ;
obj = [Person new];
此时 obj 就可以调用Person 里的方法了。
NSObejct 编译时检查 调用子类方法时需要 强制转换
id 运行时检查 不需要强制转换。
id和insanetype
都可以作为方法的返回类型,
insanetype 可以返回和方法类型相同类型的对象 id只能返回未知类型对象
insanetype 只能作为返回值 id还可以作为参数。
8 动态类型检测
动态绑定;一个对象是否调用指定的方法不是编译器决定而是运行时 决定。
动态检测:检测 一个实例对象是否是某类或者某类子类的实例。
BOOL is=[ ani isKingOfClass :[Animal class]];//
is:返回值
ani:实例对象
isKingOfClass: 检测方法
[Animal class]: 类对象
isKingOfClass 检测 ani 是否是Animal类或者子类的实例对象
isMemberOfClass 检测 ani 是否是Animal类不包括子类的实例对象
isSubClassOFClass 检测类对象是否继承类对象
BOOL is= [Dog isSubClassOFClass :[Animal class]];
判断对象能否响应指定方法
SEL sel =@selectot(eat); //包装eat方法
BOOL isRsp=[ ani respondsToSelectot:sel];//判断ani 是否可以响应eat方法
BOOL isRsp=[ ani respondsToSelectot:@selector(eat)];
9 构造方法的概念
用来初始化对象的方法。
重写构造方法 为了让对象创造出来的时候就有某些初值。构造方法是对象方法。
new = alloc+init;
alloc:为对象创建空间,返回未初始化的对象
init:调用对象方法进行初始化返回对象本身。
重写 init方法
- instancetype init{
self=[super init ] ; //先让父类做完自己初始化。
if(self){ //判断父类是否初始化成功
子类初始化代码;//子类成员变量赋初值
}
return self; //返回调用者自身。
}
自定义构造方法
1) 一定是对象方法
2) 返回值一般为id类型
3) 方法名以 initWith开头。
类比 NSString *str =[ NSString stringWithFormat:@””];
|
|