Brian F爱
从专注于角图,Web技术以yobet英雄联盟及波特兰的Node.js的Google开发人员专家中学习。
广告 ·ultimatecourses.com.
用终极课程学习角度正确的方式

默认情况下用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.@属性强大nonnsarray.*帖子;@结束```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.@属性强大nonnsarray.*帖子;@结束@implementation.postscontroller./ *默认,合成使用“_”前缀,它会表现得像我们编码了这个:/ * @synthesize posts = _posts;@结束

请记住,如果您编写自己的访问器方法(Getter和Setter),则不会为您创建实例变量,并且您必须自己定义实例变量。

如果您拥有已定义属性的合成的现有代码,则何时何于_prefix?如果您宣布您的情况,请保持这种向后兼容性@合成属性而不定义实例变量名称,那么它将继续使用该名称(没有“_”前缀)。例如,以下代码仍然可以正常工作。

@接口nsobject.@属性强大nonnsstring.*名字;@属性强大nonnsstring.*;@结束@implementation.@合成名字;-nsstring.*全名{返回[nsstring stringwithformat.@“%@%@”名字];}@结束

你可以了解更多关于这个问题在Xcode中声明Apple的开发人员网站。你也可以了解有关Xcode 4.4的新功能的更多信息

Brian F爱

嗨,我是布莱恩。我对类型名称,Angular和node.js感兴趣我嫁给了我最好的朋友邦妮,我住在波特兰和我滑雪(很多)。