有没有一种方法来合成Objective-C中类变量的setter/getters?

问题描述:

我发现自己声明了一堆类变量,并且为每个变量编写简单的get/set方法确实很累人。所以,问题是如何在Objective-C中为类变量合成setter/getter?有没有一种方法来合成Objective-C中类变量的setter/getters?

+1

你是什么意思“类变量” ? Objective-C没有这样的构造。有实例变量,局部变量,全局变量和静态变量,但没有类变量。 – Chuck 2009-09-08 02:23:50

+0

静态变量 – 2009-09-08 13:36:57

通常,当您在分组一组是为了在全球范围内访问的相关变量,创建所谓的单身:

What should my Objective-C singleton look like?

这意味着你有一个,给你一流水平的方法回到共享实例 - 所以你必须像一个电话:

[MyClass sharedInstance].myProperty 

由于值要存储的是真正的类的实例变量,就可以使用正常的属性,但所有的类都将使用相同的合作共享数据。

注意,有些人不喜欢用单身的,你可能需要阅读有关做法的注意事项:

Singleton: How should it be used

但既然你已经开始(在iPhone开发一个固有的单应用程序委托,任何人都可以随时访问)如果您小心谨慎,轻松使用该技术并不会造成伤害。请注意,不是创建一个Singleton类,而是一种替代方法是让应用程序委托创建一个变量存储类的单个实例,并让每个人都可以通过代理访问它...

+0

我想我必须坚持这项技术...... – 2009-09-09 04:50:27

你不只是编辑宏或什么?

像这样去你的头,后的界面:

@property (retain) NSString* caption; 

那么这正好immediatley里面执行:

@synthesize caption; 

退房本教程了解更多详情:http://www.cocoadevcentral.com/d/learn_objectivec/

+0

您还应该注意,这里假定带有NSString *的ivar命名的标题,类型为 – rpetrich 2009-09-08 01:54:52

+0

这就是即时变量,但其他类型(如静态)呢? – 2009-09-08 04:38:33

+1

@ Dennis:不,你不能在类上使用属性,只能在对象实例上使用。对于类变量,您必须手动实现getter和setter类方法。 – PeyloW 2009-09-08 08:06:20

属性不需要引用ivar。如果你真的想要,你可以有一个动态属性返回一个静态变量。

只需使用@dynamic并实现getter和setter来引用实现文件中的静态变量。

+0

除了您需要一个实例来调用该属性,而不是仅使用类名称... – 2009-09-08 19:40:38