在自动释放的实例变量的控制台(po)中打印值

时间:2012-04-05 12:34:34

标签: iphone objective-c ios

我有一个像这样声明的变量:

@property (nonatomic, retain) NSMutableArray *aInfo;

在开始时,如果我声明这样的变量:

self.aInfo = [[NSMutableArray alloc] init];

在应用程序的每个点上,我都可以使用断点停止执行并打印变量内容,如下所示:

po self.aInfo

但是,如果我用自动释放声明变量(应该是这样),我在断点中看不到内容...

self.aInfo = [[[NSMutableArray alloc] init] autorelease];

PD:如果我做了类似NSLog(@“%@”,self.aInfo)的事情,我可以看到内容......

1 个答案:

答案 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作为对保留属性的直接分配将创建内存泄漏。但我仍然不相信它具有记忆效率。