【问题标题】:release everything you have an @property retain @synthesize for?释放您拥有@property 保留@synthesize 的所有内容?
【发布时间】:2011-06-04 04:31:38
【问题描述】:

我开始在我的应用程序上大吃一惊,并且已经深入了解它运行良好,但我认为我让一些东西运行得有点疯狂。

对于每个@property(非原子,保留),然后我创建一个@synthesize,因为我需要在 dealloc 方法中具有[变量释放] - 这是正确的吗?

即使是 IBOutlet?

【问题讨论】:

  • 谢谢大家,我想它终于穿过了我厚厚的脑袋

标签: iphone objective-c ipad


【解决方案1】:

是的。您通过将其设为retain 属性来声明对象的所有权,这意味着您必须通过释放它来放弃所有权。

【讨论】:

  • 谢谢,我的第一个程序,我只是这么偏离轨道 - 有很多属性要发布:)
  • 您可能想查看 Accessorizer...它会让您的生活更轻松。 kevincallahan.org/software/accessorizer.html
  • 作为相关评论,为什么我现在看到人们将其属性设置为 nil 而不是 release 的代码? self.property = nil;
  • @Slee 这是让合成方法为您执行释放的常用方法,但它有一些微妙的陷阱和警告。在网站上搜索“在 dealloc 中使用访问器”(或类似的内容)
【解决方案2】:

另外,如果你有一个保留的IBOutlet,你应该释放它并在-viewDidUnload中设置它为nil。这让对象在视图被移除时释放其出口,特别是在响应低内存警告时。通过在该方法中将 ivar 设置为 nil,您可以避免在对象随后被释放时重复释放 ivar 的风险。

【讨论】:

    【解决方案3】:

    是的。如果您保留该财产,您有责任将其释放。

    声明的属性从根本上代替了访问器方法声明;当你合成一个属性时,编译器只创建任何不存在的访问器方法。与 dealloc 方法没有直接交互——属性不会自动为您释放。

    Declared Properties

    通常您将在您的 dealloc 方法中执行此操作。

    - (void)dealloc {
        [property release];
        [super dealloc];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多