suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

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

習慣沉默習慣沉默2757 Tage vor688

Antworte allen(3)Ich werde antworten

  • 漂亮男人

    漂亮男人2017-05-02 09:31:36

    在哪看的?那都是陈年往事了,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 成对出现

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:31:36

    因为会产生循环引用,比方delegate,然后造成永远也释放不掉

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-05-02 09:31:36

    因为有分类(Category)以及setter以及getter以及KVO等需要注意
    最主要的是因为分类.语法可以调用分类的属性及方法,但是_就不行了,需要注意

    Antwort
    0
  • StornierenAntwort