>  Q&A  >  본문

objective-c - 关于getter方法中使用self引发死循环的问题?

  1. 属性:
    @property (strong, nonatomic) NSArray *dataArr;

  2. 重写getter方法 (代码关于懒加载, 不过这个不是重点)

 - (NSArray *)dataArr{
    //1. 判断是否为空
    if(_dataArr == nil){ //不能写self.dataArr
        self.dataArr = @[ //可以写self.dataArr
                         
                         .........
                         
                        ];
    }
    return _dataArr;
    
}

我现在知道的东西是, 用self.dataArr会调用该属性的getter方法setter方法

所以我觉得if小括号里的不能用self.dataArr否则会死循环

但我不知道为什么if大括号里却可以用self.dataArr?

难道是大括号里的是赋值, 就只会调用setter方法?

还有return后面能写self.dataArr么?

有点混乱, 求解答...

仅有的幸福仅有的幸福2702일 전619

모든 응답(1)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-05-02 09:31:01

    . . .
    중괄호 안self.dataArr = @[]은 setter만 호출하므로 문제가 없지만 return self.dataArr은 getter를 호출하여 무한 루프를 발생시킵니다.
    직접 기록하거나 중단점을 추적할 수 있습니다.
    적절한 튜토리얼

    을 알아보세요.

    회신하다
    0
  • 취소회신하다