簡體   English   中英

不使用自我時使用EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS when not using self

再次被下面的錯誤所困擾,並且想澄清一下為什么它是一個錯誤。

我有一個簡單的UITableView可以加載一些數據:

// myclass.h
@property (nonatomic, retain) NSArray *myData

// myclass.m
@synthesize myData;

- (void) viewDidLoad {
  ...
  myData = someDataSource // note the lack of self
}

- (UITableViewCell *) cellForRowAtIndexPath ... {
   ...
   cell.textLabel.text = [self.myData objectAtIndex:indexPath.row];  // EXC_BAD_ACCESS
}

該表首先加載正常,但是當向上滾動足以使其中一個單元完全不在視圖范圍內時,我將得到EXC_BAD_ACCESS錯誤。

我是否缺少有關@property保留的信息。 我的理解是,它釋放了指針在重新分配之前指向的所有內容。 如果我是正確的,那為什么不使用自我。 引起什么問題?

謝謝您的幫助。

****更新

為什么在我檢查過的所有示例中,沒有self的dealloc方法中的對象釋放?

- (void) dealloc { 
  [someArray release]; 
  [someTableView release];
}

如果你不使用self. ,您將直接分配給實例變量myData ,它與myData 屬性無關。

self.myData只是[self myData][self setMyData:newValue]語法糖,並且合成的屬性僅創建-myData-setMyData:方法。

實例變量只是一個變量,僅此而已。 盡管它可能具有相同的名稱,但對其進行分配或讀取它就像訪問任何變量:除了賦值外,什么都不會保留,釋放或以其他方式修改。

的情況下

myData = someDataSource;

您正在為myData提供someDataSource的引用(局部變量或有限范圍變量)。 現在,只要someDataSource超出范圍,它就會被釋放,並且當您將其引用傳遞給myData它也會被釋放。

現在在

self.myData = someDataSource;

someDataSource的值分配給myData 因此, someDataSource myData發生的任何情況都將保留該值。

您也可以執行以下操作:

myData = [someDataSource retain];

希望這可以幫助。

謝謝,

Madhup

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM