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