何时使用'self'访问属性

Gly*_*ton 7 properties objective-c self retain

我已在本网站上阅读了有关此问题的一些问题,我理解以下内容:

self.property访问手动或@synthesize创建的getter/setter方法.根据属性是否声明为保留,复制等,保留计数被正确修改,例如保留属性,使用"保留"释放分配新值的先前值,并将保留计数增加1.

属性通常使用相同名称的实例变量声明(如果手动进行赋值,则可以不同).这通常是因为@synthesize生成的访问器使用实例变量引用内存中的对象,然后执行相关命令.

我的问题是基于这样一个事实:在许多例子中,self.property和property可以互换地用于不同的事情,我在确定规则时遇到了麻烦.Apple Docs中"食谱"示例应用程序中的一个示例包含以下内容:

self.navigationItem.title = recipe.name;
nameTextField.text = recipe.name;    
overviewTextField.text = recipe.overview;    
prepTimeTextField.text = recipe.prepTime; 
Run Code Online (Sandbox Code Playgroud)

和...

self.ingredients = sortedIngredients;
Run Code Online (Sandbox Code Playgroud)

这些属性中的每一个都具有相同名称的关联私有实例变量.所有都以'nonatomic,retain'属性以相同的方式声明.每个都以dealloc发布...

然而,"成分"通过self访问,"prepTimeTextField"可以直接访问.

访问方法差异的原因是什么?

如果我正在访问视图的代理呢?或者是核心数据对象,它被前一个视图控制器作为保留属性传递给视图控制器?

非常感谢

小智 2

你几乎总是想使用合成的 setter/getter 来访问变量,即使你目前没有对它们做任何特殊的事情。

如果随着应用程序的开发,您发现需要对变量进行进一步的验证/格式化,那么您只需实现所需的 setter/getter 方法,并且如果您使用了合成方法,则会调用此代码。

这通常是一个值得养成的好习惯。