-1

我有一个包含几个项目的 NSArray。NSArray 从另一个类加载到 uitableview 中。当我退出详细视图并重新输入(第三次)时,NSArray 为空,tableview 也为空。怎么了?(我正在使用垃圾收集器,所以我认为这不是泄漏)

myMatch = [[Match alloc] initWithId:1 OpponentId:13];
4

2 回答 2

1

我以前在以下上下文中看到过这一点。

您很有可能将 NSArray 定义为:

@property(弱,非原子)NSArray *myMatch;

将其更改为:

@property ( strong , nonatomic) NSArray *myMatch;

假设:

1)iOS中没有垃圾收集器,所以我猜你的意思是你正在使用自动引用计数。

2)您没有从一个视图更改为另一个视图(即您没有离开带有 UITableView 的 xib 或场景)

3) 数组已被定义为@property

什么时候应该使用弱引用或强引用?

对于初学者来说,一个好的“经验法则”是一个属性只有在引用视图上的控件时才应该是弱的,例如 @property (weak, nonatomic) IBOutlet UILabel *myLabel; 在大多数其他情况下,该属性应该是强大的。

强指针意味着“在内存中保持对该数据的强引用”。弱指针意味着“如果没有其他人对此数据感兴趣,我也不对此感兴趣。” 视图上的控件通常只需要弱指针,因为它们属于当前加载的视图,该视图具有指向它的强指针。

于 2012-05-01T20:29:42.987 回答
1

我能想到的最佳答案是正确保留 NSArray。根据我的经验(我之前遇到过类似的问题)我没有正确设置 NSArray。您是否在头文件中使用过@property?@property(非原子,保留)NSArray *myArray; 在实现部分,您可以将@synthesize 用于数组。不经过这些步骤,数组可能会在你用来初始化它的方法退出后被释放。因此,您必须保留它!

于 2012-05-01T20:01:06.273 回答