19.@property+@synthesize 与 @property增强 //问一个,最好两个都答,显得准备充分
1.@property+@synthesize搭配使用,@property生成实例变量的setter和getter方法声明,而@synthesize在.m中生成方法实现.@synthesize在生成实例变量时会检查原有实例变量中是否有与方法名同名的实例,如果有则使用该实例变量,若无,则自己在.m文件中生成与方法名同名的实例变量.这种用法只在Xcode4.4之前
2.@property增强:Xcode4.4之后,单独在.h文件中用@property会自动生成对应的setter和getter方法的声明和实现.首先会检查原声明实例变量中是否有带'_'前缀与方法名同名的实例,如果有则使用该实例,如果没有,则在.m文件中生成一个方法名带'_'前缀的实例变量
3.不论@property是否搭配@synthesize使用,生成的实例变量都在.m文件中,属于私有变量,子类和类外部无法访问,只能通过点语法(实质是setter和getter方法)来访问
4.可以重写@property生成的setter或getter方法,但是不要都重写 //可以不答这一条
20.动态类型与静态类型
动态类型:编译时类型不确定,运行时才检测的类型,例如: id obj = [Person new];
静态类型:编译时已经确定的类型,例如: Person *per = [Person new];
21.重写构造方法init
目的:让对象在创建时,实例变量就具有某些值
要求:在重写方法中调用NSObject的init方法 self = [super init]
缺点:每次创建对象,属性的值都相同
22.自定义构造方法
不属于对NSObject的init方法的重写,但是同样需要调用NSObject的init方法
优点:可以在创建对象时让其实例变量拥有指定值
要点:必须以"initWithxxx"开头,"W"必须大写
/*
举例:-(instancetype)initWith:(NSString *) Name andAge:(int) age
stu initWitn:@"赵日天" andAge: 10 */ |
|
|