我有一个像这样声明的变量:
@property (nonatomic, retain) NSMutableArray *aInfo;
在开始时,如果我声明这样的变量:
self.aInfo = [[NSMutableArray alloc] init];
在应用程序的每个点上,我都可以使用断点停止执行并打印变量内容,如下所示:
po self.aInfo
但是,如果我用自动释放声明变量(应该是这样),我在断点中看不到内容...
self.aInfo = [[[NSMutableArray alloc] init] autorelease];
PD:如果我做了类似NSLog(@“%@”,self.aInfo)的事情,我可以看到内容......
答案 0 :(得分:1)
如果我用autorelease声明变量(应该是这样)......
因为不应该。试试这个:
NSMutableArray *aNewArray = [[NSMutableArray alloc] init];
self.aInfo = aNewArray;
[aNewArray release];
或使用自动释放池中的便捷方法,您不拥有该方法,因此可以直接分配:
self.aInfo = [NSMutableArray array];
或:
self.aInfo = [NSMutableArray arrayWithCapacity:20]; // use whatever number makes sense
请记住,当您将属性设置为“保留”时,它就是这样做的。它的合成访问器将释放旧的分配并保留新的分配。因此,如果直接为其分配一个alloc'd实例,该实例将被保留两次,从而造成内存泄漏。*
*编辑:请参阅下面的deanWombourne的评论。 alloc] init] autorelease
作为对保留属性的直接分配将不创建内存泄漏。但我仍然不相信它具有记忆效率。