我有一个视图控制器显示一个表格视图,见下文:
//.h file
@interface CoreDataViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
//NSArray property
@property (retain, nonatomic) NSArray *arr;
@end
//.m file
- (void)viewDidLoad {
//fetch data from core data, pass to arr property
//context is a instance of NSManagedObjectContext
arr = [context executeFetchRequest:request error:nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (arr == nil) {
return 0;
}
return [arr count]; //program stop here, nothing showed up in output console
}
xcode Profile(Instrument) 告诉我在return [arr count] 处有一个僵尸对象; 我对后台发生的事情感到困惑,也许属性arr是由 iOS 发布的,但是该属性在 .h 文件中确实有一个保留关键字。
如果 NSArray 像这样替换为 NSMutableArray,我发现一个解决方案可以解决这个问题:
@interface CoreDataViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
//change to NSMutableArray
@property (retain, nonatomic) NSMutableArray *arr;
@end
- (void)viewDidLoad {
//convert NSArray to NSMutableArray
arr = [[context executeFetchRequest:request error:nil] mutableCopy];
}
mutableCopy方法中是否有保留或自动释放?