![]() |
1
71
每个对象都有一个引用计数。当它变为0时,对象被解除分配。
假设财产被声明为
您的第一个示例,逐行:
规则是,如果你创建了一个对象,你有责任在处理完后释放它。在您的示例中,代码是在设置属性后使用TempaControl完成的。setter方法负责调用
如果财产已申报
如果财产已申报
|
![]() |
2
31
至于为什么选择前者而不是后者: 后者的正确表述是
与前者相比,这通过使用自动释放池增加了额外的开销,并且在某些情况下会导致对象的生命周期被不必要地延长(直到自动释放池被释放),这将增加应用程序的内存占用。
这就引出了示例代码中所示的实现:
这遵循最佳实践,因为:
|
![]() |
3
5
还请注意,您希望将代码缩减为一行,这也是许多人使用自动释放的原因:
虽然从理论上讲,iPhone autorelease更昂贵(从未听过明确的解释),因此您可能希望在将对象分配到其他位置后立即显式释放。 |
![]() |
4
5
如果您使用的是Xcode,它可以帮助您使用静态分析器检测此类代码。 只需点击Build>&燃气轮机;构建和分析
|
![]() |
5
4
如果它被定义为
|
![]() |
6
2
你也可以这样做
|
![]() |
user2606782 · 限制子视图在superview边界内的移动 7 年前 |