tit*_*coy 9 objective-c hidden-variables
有没有办法在不隐藏该变量的情况下为与Objective-C中的实例变量同名的方法提供参数?
例如,
- (void)doSomething:(id)object
{
self.object = object;
}Run Code Online (Sandbox Code Playgroud)
上面的代码给出了警告"对象'的本地声明隐藏实例变量."
显而易见的解决方案是以不同的方式命名参数参数,但我发现选择像"anObject"而不是"object"这样的名称很烦人.
mip*_*adi 13
您可能能够执行类似的操作self->object = object,但Objective-C约定(源自Smalltalk)是使用"a"或"an"为参数添加前缀(如果参数与实例变量具有相同名称).
您可以使用点表示法来访问属性(如示例中所示),但实例变量只有一个访问路径,因此,如果要同时访问实例变量和局部变量,唯一的解决方案是为它们指定不同的名称.
从形式上讲,这与lambda演算中alpha转换的限制有关,特别是绑定变量应保持绑定且自由变量保持空闲.
如果您不喜欢本地的"an"前缀,则可以对实例变量使用"_"前缀约定,因为它们也是有效保护的变量.
@interface AClass {
id _object;
}
@property (retain) id object;
@end
@implementation AClass
@synthesize object = _object;
- (void)doSomething:(id)object
{
[_object befriend:object];
}
...
Run Code Online (Sandbox Code Playgroud)
当然,"_"读作"我的",因此它可能与参数之前的"a"/"an"一样令人反感.重命名是最佳解决方案,因为实例和局部变量具有不同的角色,它们的名称应该反映这一点.
| 归档时间: |
|
| 查看次数: |
5951 次 |
| 最近记录: |