默认情况下用Xcode 4.4合成
Objective-C是一种很好的编程语言,并支持通过宣布宣布类属性@属性
关键词。
使用属性提供类中的访问器(Getter和Setter)方法,而无需编写它们。使用面向对象编程的访问者方法非常重要,因为它确保封装类内的数据。这意味着outsider无法使用getter / setter修改类实例变量。作为程序员,您可以在类中实现这些Getter和Setter方法,允许您控制存储在类中的值。
以前在Objective-c中,我们经常写作@属性
我们的界面中的关键字(.h文件),以及a@synthesiz
我们实现中的e关键字(.m文件)。新的Xcode 4.4(以及新的LLVM Clang编译器),我们不再需要合成我们的属性。当我们编译我们的代码时,他们会为我们完成!
属性的基础知识
让我们从声明类属性的基础开始。我们使用该属性在我们的界面中声明@属性
关键字,后跟某些属性,类型和名称:
@属性(属性)键入名称
例如,让我们在PostScontroller.h文件中定义一个名为“posts”的数组:
@接口postscontroller.:UIViewController.@属性(强大那non)nsarray.*帖子;@结束```Objectivec正常那我们还将综合该物业在我们的实施(。m文件)还有:```Objectivec@implementation.postscontroller.@合成帖子=_Posts.;@结束
这相当于在我们的类中定义两种方法,一个用于访问(获取)帖子数组,一个用于从我们的外部突变(设置)帖子数组postscontroller.
目的。最佳实践表明,我们的getter方法应该在属性之后简单地命名,在这种情况下,该方法将被命名为“post”,因此一个人可能会在这样的Postscontroller类的实例上调用该方法:[Postscontroller Posts]
。并且,应命名设置方法setProperty:
。在这种情况下,该方法将命名为“setPosts”,因此人员可能会在我们的PostScontroller类的实例上调用方法:[postscontroller setposts:newposts]
。如果我们明确地写作了访问者方法,这两种方法都是这样的。
@implementation.postscontroller.{nsarray.*_Posts.;}-(nsarray.*)帖子{返回_Posts.;}-(空虚)setposts.:(nsarray.*)帖子{_Posts.=帖子;}@结束
默认情况下合成
从Xcode 4.4开始(OS x 10.8和iOS 5.1),我们不再需要使用@合成
关键词。我们只是宣布了@属性
在我们的界面中,Xcode照顾其余;创建必要的实例变量以及访问者方法。当我们没有明确定义这些时,在编译新的LLVM编译器(Clang)时,这是完成的。如果我们想覆盖此默认行为,我们仍然可以自己声明访问者方法。您不必在Xcode中做任何特别的事情来实现这一目标。
实例变量命名
实例变量现在以“_”字符为前缀,您仍然可以在课堂本身内访问。
@接口postscontroller.:UIViewController.@属性(强大那non)nsarray.*帖子;@结束@implementation.postscontroller./ *默认,合成使用“_”前缀,它会表现得像我们编码了这个:/ * @synthesize posts = _posts;@结束
请记住,如果您编写自己的访问器方法(Getter和Setter),则不会为您创建实例变量,并且您必须自己定义实例变量。
如果您拥有已定义属性的合成的现有代码,则何时何于_prefix?如果您宣布您的情况,请保持这种向后兼容性@合成
属性而不定义实例变量名称,那么它将继续使用该名称(没有“_”前缀)。例如,以下代码仍然可以正常工作。
@接口人:nsobject.@属性(强大那non)nsstring.*名字;@属性(强大那non)nsstring.*姓;@结束@implementation.人@合成名字那姓;-(nsstring.*)全名{返回[nsstring stringwithformat.:@“%@%@”那名字那姓];}@结束
你可以了解更多关于这个问题在Xcode中声明Apple的开发人员网站。你也可以了解有关Xcode 4.4的新功能的更多信息。