码迷,mamicode.com
首页 > 数据库 > 详细

Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法

时间:2014-08-06 19:34:52      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:java   使用   io   strong   for   问题   cti   代码   

曾经阅读过苹果公司官方文档“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]

Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法,布布扣,bubuko.com

Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法

标签:java   使用   io   strong   for   问题   cti   代码   

原文地址:http://my.oschina.net/nswish/blog/298603

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!