在某些书中,我注意到Apple的代码示例和互联网资源直接访问ivar而不是使用合成访问器。在我看来,它经常用于UILabel,UITextFiled和UITextView。
@interface MagicViewController : UIViewController {
UITextField *aField;
}
@property (nonatomic, retain) UITextField *field;
@implementation MagicViewController
@synthesize aField;
- (void) superMethod
{
aField.text = @"Bla-bla-bla";
NSString *string = [NSString stringWithString:aField.text];
NSLog(@"Ho-ho-ho %@", string);
}
问题:出于某些原因它是否安全?他们为什么不使用
- (void) superMethod
{
self.aField.text = @"Bla-bla-bla";
NSString *string = [NSString stringWithString:self.aField.text];
NSLog(@"Ho-ho-ho %@", string);
}
答案 0 :(得分:1)
不使用访问者保证您正在访问的内容实际上是ivar字段,因为子类可以覆盖.aField
,提供其他内容。
这是你想要或不想变化的东西。
这是示例代码避免访问者支持直接访问的一个可能原因,但是在任何给定情况下完成它的原因并不一定容易知道。
另一个可能的原因是访问ivar更快,特别是在iOS上,周期来之不易。
答案 1 :(得分:0)
在这种特殊情况下,无论哪种方式都可以正常工作。他们喜欢在参考文献中定义所有内容,以便您可以准确地看到发生了什么。