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