我有一个包含几个项目的NSArray。 NSArray从另一个类加载到uitableview中。当我退出详细视图并重新进入(第3次)时,NSArray为空,tableview也是空的。怎么了? (我正在使用垃圾收集器,所以我认为它不是泄漏)
myMatch = [[Match alloc] initWithId:1 OpponentId:13];
答案 0 :(得分:1)
我能想到的最佳答案是妥善保留NSArray。 根据我的经验(我之前遇到过类似的问题)我没有正确设置NSArray。 你在头文件中使用过@property吗? @property(nonatomic,retain)NSArray * myArray; 在实现部分中,您可以使用@synthesize作为数组。 不经过这些步骤,可以在用于初始化它的方法之后释放该数组,然后退出。因此,你必须保留它!
答案 1 :(得分:1)
我之前在以下情况中看过这个。
您很有可能将NSArray定义为:
@property(弱,非原子)NSArray * myMatch;
将其更改为:
@property(强大,非原子)NSArray * myMatch;
<强>假设:强>
1)iOS中没有垃圾收集器,所以我猜你的意思是你正在使用自动引用计数。
2)你没有从一个视图改变到另一个视图(即你没有离开xib或具有UITableView的场景)
3)数组已被定义为@property
什么时候应该使用弱引用或强引用?
对于初学者来说,一个好的“经验法则”是,如果一个属性引用视图上的控件,那么该属性应该是弱的,例如: @property(弱,非原子)IBOutlet UILabel * myLabel; 在大多数其他情况下,财产应该是强大的。
强指针意味着“在内存中保存对此数据的强引用”。 一个弱指针意味着'如果没有其他人对这些数据感兴趣,我对它也不感兴趣。' 视图上的控件通常只需要弱指针,因为它们属于当前加载的视图,该视图具有指向它的强指针。