objective-c - OC 在初始化方法或者是 dealloc 中最好不要使用属性,为什么?

查看:67
本文介绍了objective-c - OC 在初始化方法或者是 dealloc 中最好不要使用属性,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看过好几次这种描述:在初始化方法或者是 dealloc 中最好不要使用属性,因为无法确定 self 到底是不是确实调用的是你想要的实例,这个是为什么呢?

解决方案

在哪看的?那都是陈年往事了,ARC 里没有限制,随便用。

以前手动管理内存的年代,因为调用属性会涉及到引用计数器的加减,而 self = [super ...] 初始化的对象不一定是当前类的对象,可能是变体或私有类(objc里的class有 classmetaclass 的区别),所以在你不知道属性 setter 方法里到底是怎么加减引用计数器的情况下,你就只针对 ivar 进行 retain 和 release 就行了。

- (id)initWithString:(NSString *)str
{
    self = [super init];
    if (self) {
        _foo = [str copy];
    }
    return self;
}

- (void)dealloc
{
    [_foo release];
    [super dealloc];
}

retain(copy,new) 和 release 成对出现

这篇关于objective-c - OC 在初始化方法或者是 dealloc 中最好不要使用属性,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆