有没有更快的方法来执行 @property 、 @synthesize 和释放类变量?
Posted
技术标签:
【中文标题】有没有更快的方法来执行 @property 、 @synthesize 和释放类变量?【英文标题】:Is there a faster way to do @property , @synthesize and release a class variable? 【发布时间】:2011-09-06 01:43:55 【问题描述】:我知道@synthesize
已经减少了我编写 getter 和 setter 的工作量。但是我经常不得不使用的一个常见过程是这 4 个步骤,例如
SomeView *abc;
@property(nonatomic,retain)SomeView *abc;
@synthesize abc;
[abc release];
有人想出我在哪里写SomeView *abc
的任何想法吗?在.h
和步骤2,3,4自动生成?
【问题讨论】:
坦率地说,我认为没有比这更好的了!挺方便的。 好吧,一方面,您实际上并不需要第 1 步——@synthesize abc;
会为您处理好这些。或者我所做的是@syntheisze abc = _abc;
,这样该属性就不会与实例变量混淆。
希望 XCode 能够为此提供快捷方式;如果您要使用类似的模式创建大量变量,这会有点烦人
不要在 ivar 名称上使用单前导下划线。这是 Apple 的内部编码约定。
@NSResponder - 建议您不要对方法执行此操作,但似乎对 iVar 名称的前导下划线没有限制。
【参考方案1】:
跳过第一步,没必要,@synthesize 会创建 ivar。
【讨论】:
【参考方案2】:如果是IBOutlet
,Xcode 会在您使用 IB 创建变量时为您编写所有代码。您只需从要在界面编辑器中引用的对象拖到头文件中要声明属性的位置,填写表格,然后点击确定。
正如其他人所提到的,您可以跳过声明支持 ivar,而是让 @synthesize
为您生成它。
您可以使用适当的编译器标志跳过@synthesize
。在网上搜索“默认@synthesize”之类的内容。
跳过-dealloc
的一种方法是使用Obj-C 关联对象API 将对象从主对象上悬挂下来。保留的关联对象将在与其关联的对象被释放时被释放。
还有自动引用计数 (ARC),它可以更干净、更明确地消除 -dealloc
。
【讨论】:
自动@synthesize 尚不可用。 后面的部分对我来说是新的,谢谢你的信息,会调查这个.. 是否建议使用 1)通过使用适当的编译器标志跳过 @synthesize 和 2)通过 -dealloc 跳过协会/ARC?我的意思是开发人员实际上使用并喜欢它而不是通常? 显然,添加了对默认@synthesize
的支持,然后很快就删除了。我希望该功能在恢复时将被广泛使用。通过关联跳过-dealloc
是不寻常但可行的。一旦 Apple 发布捆绑了支持 ARC 的编译器的 Xcode 版本,通过 ARC 跳过它将成为 SOP。【参考方案3】:
帮助不大,但我要做的一件事是将 dealloc 移到实现的顶部,在其他方法之前。 @synthesize 语句就在其上方,因此您可以经常放入 @synthesize 和 release 而无需滚动。这在编码时并不能真正节省大量时间,但它确实可以帮助您使两个部分保持同步,并且在调试时可以节省时间。
【讨论】:
【参考方案4】:希望不是一件坏事。在某些情况下,它已经为您完成了:
在 Xcode 4 的 Interface Builder 中,当您将元素拖到其文件所有者的 .h 文件中时,它会为您执行 1-4 次操作,甚至在 viewDidUnload
中为您将其设置为 nil。
-
现代运行时不需要。
仍然需要这样做。
在 WWDC10(113 和 144)会议中谈到了取消这一点,但发行说明说这还没有发生。
使用 ARC,你不需要这个。
这是您不需要做的 4 项中的 2 项,而他们正在努力移除其中一项。所以这还不是全部 - 但它变得越来越容易。
【讨论】:
以上是关于有没有更快的方法来执行 @property 、 @synthesize 和释放类变量?的主要内容,如果未能解决你的问题,请参考以下文章
有没有更快的方法来检索 System.Environment.UserName?