将self与实例一起用于alloc和release

时间:2012-02-10 06:59:45

标签: iphone ios xcode memory-management

  

可能重复:
  Why shouldn’t I use the getter to release a property in objective-c?

我对自己的分配和释放有点困惑。在查看了几篇文章和教程后,似乎需要更多建议。以下是问题清单:

  1. 这是分配和发布的正确方法吗? self.selectPopover = [[UIPopoverController alloc] init];
  2. [self.selectPopover release];

    1. 尝试从另一个类执行此代码。 classArr在ObjClass中定义。当我分析这个代码潜在的泄漏时“发生了一个对象的引用计数的不正确的减少,这个对象在此时不被调用者拥有”。
    2. ObjClass.classArr = [[NSMutableArray alloc] init];

      [ObjClass.classArr release];

      所以任何人都可以清除我对此的怀疑。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以通过这篇文章了解您正在寻找的概念:

Objective-C Difference between setting nil and releasing

答案 1 :(得分:0)

我假设您已将该属性创建为retain
当你 ObjClass.classArr = [[NSMutableArray alloc] init];
此时,retainCount变为两个,一个因为alloc而另一个因为通过retain类型的属性赋值
当你[ObjClass.classArr release];此时你发送一个释放并且reatinCount从2变为1.
所以要么你喜欢这样做

ObjClass.classArr = [[NSMutableArray alloc]init];
[ObjClass.classArr release];

使其保留计数为1
或者你可以这样做,这是实际发生的情况

   classArr = [[NSMutableArray alloc] init];

指定没有属性的ivar,使retainCount为1。