不是一个完整的菜鸟我对iOS编程和Ojbective-C都很陌生.我主要来自C(DSP,微控制器),Delphi XE2/Pascal,Visual Basic和Java(桌面和Android应用程序)的背景.
我主要从Apress的"Beginning iOS 5 Development"一书中学习了Cocoa.
最近我观看了WWDC 2012的视频并浏览了他们的一些示例代码,我必须说我对编写应用程序的正确方法感到困惑,更具体地说是@ property/@ synthesize字.
在本书中,大多数(并非全部)示例代码用于定义属性,例如
ViewController.h
@property (strong, nonatomic) NSMutableArray *list;
ViewController.m
@synthesize list;
Run Code Online (Sandbox Code Playgroud)
然后所有代码访问合成列表
self.list
Run Code Online (Sandbox Code Playgroud)
甚至简单地说
list
Run Code Online (Sandbox Code Playgroud)
现在在我阅读的每个WWDC代码示例中,我看到程序员定义了一个属性,但是在.m文件中他们做了类似的事情
@synthesize list = _list;
Run Code Online (Sandbox Code Playgroud)
并且有时访问
self.list
Run Code Online (Sandbox Code Playgroud)
要么
_list
Run Code Online (Sandbox Code Playgroud)
我很迷惑.什么是正确的做法?由于Apple程序员都使用下划线,我认为我应该这样做,但为什么这本书没有呢?list和_list之间有区别吗?更重要的是,因为我在同一个对象中为什么有时使用self.list,有时候使用list/_list.
有时他们不使用@synthesize,我认为是时候他们想重新编写自己的访问器和mutators(到目前为止我从来都不是这样).
我已经在网上阅读了这些内容,但没有什么能够让我的思路正确,所以我依靠StackOverflow来实现这一点.
最后但并非最不重要的是,我更喜欢并根据当前的iOS 6最佳实践/编程技术进行回答.没用,告诉我如何在旧的iOS中正确地做到这一点.
我在iOSU开发的iTunesU课程中观看精彩的Paul Haggerty(因为谁不需要刷新基础知识?)他说了一些我不知道的事情:
"我们永远不会访问下划线(_符号)变量"
然后他继续讨论了如何使用@property声明变量,@synthesize variable = _variable是由编译器在幕后生成的代码,以及setter和getter.基本上,代码永远不会出现在您的应用程序中.
在我迄今为止编写的所有iOS应用程序中,我总是@property在我的头文件中声明我的变量.@synthesize VARIABLE_NAME = _VARIABLE_NAME;自从观看讲座以来,我现在很困惑我是否应该@synthesize在我的代码中使用它.
我应该只使用财产声明吗?如果我在代码中使用合成声明,它有什么区别(如果有的话)?
既然Haggerty先生不使用它,那我为什么呢?(考虑到他是一个iOS半神).我非常觉得做我一直在做的事情是不好的形式.
有人关心澄清这个问题吗?