何时访问属性与“自我”
我已经阅读了这个网站上关于这个问题的一些问题,我理解如下:
self.property访问手动创build或通过@synthesize创build的getter / setter方法。 取决于属性是否被声明为保留,复制等,保留计数被正确修改,例如保留属性,释放先前赋值为“保留”的新值,并将保留计数递增1。
属性通常使用相同名称的实例variables来声明(如果您手动进行赋值,可能会有所不同)。 这通常是因为@synthesize生成的访问器使用实例variables来引用内存中的对象,然后执行相关的命令。
我的问题是基于这样的事实,在很多例子中,self.property和property在不同的事情上可以互换使用,而且我在判断规则时遇到了麻烦。 “苹果文档”中的“食谱”示例应用程序中的一个示例具有以下内容:
self.navigationItem.title = recipe.name; nameTextField.text = recipe.name; overviewTextField.text = recipe.overview; prepTimeTextField.text = recipe.prepTime;
和…
self.ingredients = sortedIngredients;
每个属性都具有相同名称的相关私有实例variables。 所有的都是用“非primefaces的,保留的”属性以相同的方式声明的。 每个都释放dealloc …
然而,“成分”是通过自我访问和“prepTimeTextField”直接访问。
访问方法不同的原因是什么?
如果我正在访问视图的代表呢? 或者是一个核心数据对象,它被前一个视图控制器作为保留属性传递给视图控制器?
非常感谢
你几乎总是想用合成的setter / getters访问variables,即使你现在没有对它们做任何特殊的处理。
如果随着应用程序的开发,您会发现需要对variables进行进一步的validation/格式化,那么您可以实现所需的setter / getter方法,如果使用了合成的方法,则会调用该代码。
这通常是一个很好的习惯。
如果你声明你的财产是这样的:
@property (nonatomic, retain) NSMutableArray *myArray;
生成的setter将自动保留传入的值。这就是为什么有时在Apple示例代码中可以看到这一点的原因:
self.myArray= [[NSMutableArray alloc] init]: [self.myArray release];
“[self.myArray发布]”是必需的,因为第一行之后的保留数是两个。 释放它确保它降到1(它应该是)。
如果我只是使用自动生成的setter,那么在课堂上工作时我不会使用它们。 这对我来说简单得多:
myArray = [[NSMutableArray alloc] init];
对比上面的例子。
我的两分钱
依靠。 如果你的实例variables很笨,可以直接访问它们。 但是我们大多数人喜欢通过属性访问成员的原因是,我们可以改变关于该成员的逻辑的东西,事情仍然有效。
例如,有时你会想要改变一个类来加载一些懒惰的东西,而不是立即。 如果您已经使用属性来访问您的实例variables,那么您可以编辑访问器方法,一切都应该工作。