首页 > 代码库 > Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法
Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法
曾经阅读过苹果公司官方文档“Advanced Memory Management Programming Guide”,对于为什么不能在init和dealloc方法中使用accessor方法一事,一直不明白。自己平时的工作实践中,貌似也没发现过有啥问题。直到今天,在调试一个错误的时候,才猛然间明白了其中的原因。
之所以不能在init和dealloc中使用accessor,是因为我们要提防:子类有可能会覆盖父类的accessor方法,并改变accessor方法的行为。
参考代码:
#import <Foundation/Foundation.h> @interface Test : NSObject @property (nonatomic, retain) NSString * str; @end @implementation Test - (id)init { self = [super init]; if(self){ self.str = @"aaa"; } return self; } @end @interface Test1 : Test @end @implementation Test1 - (void)setStr:(NSString *)str { [super setStr: [NSString stringWithFormat:@"[%@]", str]]; } @end int main() { @autoreleasepool{ Test *test = [[Test new] autorelease]; NSLog(@"test=%@", test.str); Test1 *test1 = [[Test1 new] autorelease]; NSLog(@"test1=%@", test1.str); return 0; } }
输出结果:
test=aaa test1=[aaa]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。