天天看點

懶加載時出錯

在使用懶加載初始化對象的時候,出現了:

Thread1:EXC_BAD_ACCESS(code=2,address=0x7fff52c70ff8)這樣的錯誤,原因是使用了沒有初始化或者被釋放掉的對象,但是找了好久也沒發現問題到底是在哪兒,網上說可以使用NSZombieEnbled定位到到具體問題,但是依然無解。

後來查了一下,終于發現問題,這是我原來的代碼:

-(NSArray *)MyArray{
    if (self.MyArray==nil) {
        self.MyArray=[[NSArray alloc]init];
    }
    return self.MyArray;
}
           

這樣就會出現上述問題,是以把它改成如下:

-(NSArray *)MyArray{
    if (_MyArray==nil) {
        _MyArray=[[NSArray alloc]init];
    }
    return _MyArray;
}
           

為什麼是這樣呢?

我的了解是

懶加載的定義就是重寫對象的get方法,即需要時才加載,當我們需要調用對象的get方法時,才會去加載對象。

而在get方法裡如果使用

OC裡的點文法來說,這一句放在等号右邊是調用getter,放在等号左邊是調用setter。這樣就相當于方法調用,造成死循環,是以在getter和setter方法裡,以後還是使用_MyArray這樣的表達吧。

繼續閱讀