objective-c - 在 Objective C 中添加成员变量

标签 objective-c

首先我要做的

@property (retain) aMember;

然后在实现文件中我要做

@synthesize aMember;

然后在 dealloc 中,我必须做

self.aMember= nil; (or [aMember release])

这是写本质上相同的内容的 3 倍

有什么办法可以加快速度吗?

我的意思是我可以从 IB 中拖放控件,xcode 会自动生成这些代码,为什么我不能为更普通的代码这样做?

最佳答案

作为我的日常工作来自 C# 和托管语言的人,我完全同意你质疑这 3 个步骤的过程。事实上,在 MS Visual Studio 中使用 C# 创建属性几乎是一件非常容易的事情,但我离题了。

即使您必须编写这 3 行代码,但在幕后还有大量工作在进行。

  1. 您对 @property 的声明告诉 objective-c 一些重要的属性(原子的、非原子的、保留的、复制的等等),当您的类的用户设置您的属性时如何处理它。当您考虑这一点时,这些属性(无需编写任何代码)是;帮助您创建线程安全的代码,处理对对象的引用,这样您就不必担心它们在您身上消失,或者复制值以便您拥有自己的对象副本。 @property 也很重要,因为它是在头文件中声明的(通常)。这让其他开发人员了解您的类的属性,并提供一些小提示,说明他们传递给这些属性的对象在类的生命周期中将如何处理。

  2. @synthesize 还通过为该属性创建 getter 和 setter 来做大量工作,它们还为您处理各种内存管理。您无需担心释放旧引用并正确引用新对象。仅此一项对我来说就是一个很棒的功能,尤其是当您是 objective-c 的新手时,很容易忘记动不动就处理内存管理。 @synthesize 只是为您做这件事,您不必自己编写所有获取和设置代码。

  3. dealloc 调用只是在非内存管理环境中的生活。虽然它增加了额外的步骤,但我很欣赏显式内存管理在手机等受限环境中带来的好处。

因此,所有 3 个步骤都是必需的,它们各不相同,当您考虑它时,实际上在幕后为您做了很多工作。

关于objective-c - 在 Objective C 中添加成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884765/

相关文章:

objective-c - Xcode:摆脱前向类警告

iphone - 如何在cocos2d中创建按钮?

iphone - 更改 reg-ex 以在 iphone 上进行电子邮件验证

objective-c - objective-c 中的科学记数法(与基数 e 计算混淆)

ios - UICollectionView - 不显示单元格

objective-c - Swift 有标记指针吗?

iphone - 如何从 CoreTelephony.framework 获取电话控制 api 的头文件

objective-c - 如何在键盘打开的同时滚动表格 View ?

objective-c - SpriteKit 缺少线性变换矩阵

objective-c - Xcode 4.4 + OSX 10.5 作为开发目标 = Clang LLVM 1.0 错误