Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法
2014-08-06 16:21
375 查看
曾经阅读过苹果公司官方文档“Advanced Memory Management Programming Guide”,对于为什么不能在init和dealloc方法中使用accessor方法一事,一直不明白。自己平时的工作实践中,貌似也没发现过有啥问题。直到今天,在调试一个错误的时候,才猛然间明白了其中的原因。
之所以不能在init和dealloc中使用accessor,是因为我们要提防:子类有可能会覆盖父类的accessor方法,从而改变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]
相关文章推荐
- 为什么不能在init和dealloc函数中使用accessor方法
- 为什么不能在init和dealloc函数中使用accessor方法
- 不要在init和dealloc函数中使用Accessor 方法[Don’t Use Accessor Methods in Initializer Methods and dealloc]
- 为什么不能使用Thread.stop()方法?
- 为什么使用jquery 的submit()方法不能提交表单?
- 为什么静态方法中不能使用this和super关键字
- finalize()为什么不能在mian方法中使用
- init和dealloc中使用property(accessor)的副作用
- 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,reado
- 使用迭代器时为什么不能用集合删除元素的方法
- 为什么使用LinkedList时如果用addFirst方法,不能继承父类collection接口
- 静态方法中为什么不能使用super和this
- 静态方法中为什么不能使用this
- 静态方法为什么不能使用非静态成员变量
- Java基础问题:static方法中为什么不能使用非static的方法或变量
- Objective-C中,重写init方法为什么要self = [super init]?
- Objective-C中,重写init方法为什么要self = [super init]
- Pycharm里面使用PIL库之后,为什么调用Image的方法不能弹出代码提示,怎样能让代码提示弹出?
- 为什么不能使用Thread.stop()方法?
- 为什么子类不能访问基类的private成员(为什么要使用get,set方法)?为什么要这样设计?