
圖片來自網(wǎng)絡(luò)
1、請簡述self.name = xxx 與_name= xxx 的區(qū)別
self.name = xxx 是調(diào)用setName方法
_name = xxx 不會(huì)調(diào)用setName方法 是直接賦值
2、下面的代碼會(huì)輸出什么?
@implementation Son : Father
- (id)init {
if (self = [super init]) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end
// 解析:
son
son
self 是類的隱藏參數(shù),指向當(dāng)前調(diào)用方法的這個(gè)類的實(shí)例。
super是一個(gè)Magic Keyword,它本質(zhì)是一個(gè)編譯器標(biāo)示符,和self是指向的同一個(gè)消息接收者。
不同的是:super會(huì)告訴編譯器,調(diào)用class這個(gè)方法時(shí),要去父類的方法,而不是本類里的。
上面的例子不管調(diào)用[self class]還是[super class],接受消息的對象都是當(dāng)前 Son *obj 這個(gè)對象。