【问题标题】:Which attribute to use as property for class哪个属性用作类的属性
【发布时间】:2012-08-09 10:46:07
【问题描述】:
@property (nonatomic, assign) Class aClass;

@property (nonatomic, retain) Class aClass;

注意:“类”是objc.h中定义的“类”

dealloc 方法中是否需要release

【问题讨论】:

  • 您可以简单地使用 ARC,实际上鼓励您使用 ARC。它应该是非原子的,强大的。作为一个好习惯,你应该在 viewdidunload 中将其设为 nil
  • @LuisOscar ARC 并不比 MRC 好,实际上是一样的。并且 nil viewDidUnload 中的某些内容仅在它是 IBOutlet 时才被推荐,这显然不是这里的情况。
  • 谢谢,对我糟糕的英语感到抱歉。我擅长 objc 的内存管理。但我的问题是如何使用 Class 作为类的属性。
  • @Sulthan 根据苹果的 Objective-C 自动引用计数 (ARC) 使内存管理成为编译器的工作。通过使用 Apple LLVM 编译器启用 ARC,您将永远不需要再次键入 retain 或 release,从而大大简化了开发过程,同时减少了崩溃和内存泄漏。编译器对您的对象有一个完整的了解,并在每个对象不再使用时立即释放它,因此应用程序运行速度与以往一样快,性能可预测且流畅。
  • @Sulthan 告诉我这是否没有让它变得更好,特别是对于刚接触 ios 开发的人(可以从问题中看出)。关于第二件事,不,你也错了。如果它是一个 IBOutlet,通常最好将其设为弱引用,因为视图已经有一个指向它的强指针。在内存不足的情况下,您可以在 viewdidunload 中清零所有东西,在这种情况下,您应该清零所有可以轻松重建的东西(通常是 viewDidLoad 中的东西)。它本身不是一个 dealloc 函数。

标签: objective-c ios class


【解决方案1】:

由于它是指向类对象的指针,并且类对象在应用程序的整个生命周期中都存在,因此retainrelease 等内存管理操作对其没有影响。所以无论你使用assign 还是release 都无关紧要。使用assign会更简单。

【讨论】:

  • 是的,和我的测试结果一致!谢谢你,newacct。
【解决方案2】:

如果你使用retain,编译器会为你生成一个对象,并在类中保留它。对于这种情况,您应该在dealloc 中发布它。 不过不要忘记添加合成器,否则你不会得到任何 getter 和 setter。

在此处阅读更多信息:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html
在这里:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9

【讨论】:

  • 为什么要保留 Class 对象?在大多数情况下(当您不在运行时创建动态类对时)我认为它们至少可以在应用程序的整个生命周期内一直存在。这是错误的假设吗?
  • 因为您想拥有对该对象的控制权和所有权。如果你把它放到自动释放,它可能会在任何时候被释放......当你保留对象时,你可以在完成后释放它,从而更好的内存管理和更少的崩溃变化,例如EXC_BAD_ACCESS。更好的解释也在这里:stackoverflow.com/questions/1380338/…
  • 正是我的观点:你为什么要保留像 UIKeyboardWillShowNotification 这样的常量,它肯定会超过你的应用程序生命周期,从内存管理的角度来看,大多数类都属于同一类别:你不' t 真的需要保留这些,因为在您的应用程序终止之前它们不会被释放。尽管在像 CALayer 这样的情况下,苹果建议从您的自定义实现中返回 Class 对象
  • 我认为您可能错过了我的回答,我并不是说您应该或不应该保留。我正在回答用户关于差异的问题。
  • 抱歉,我的意思是,在问题的背景下,保留课程是一种无效的方法。很抱歉造成混淆:)
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2014-03-05
  • 2020-09-01
  • 2014-12-25
  • 1970-01-01
  • 2017-01-16
相关资源
最近更新 更多