[英]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.