再谈Objective-C中的self和instance变量
在一些书中,我注意到苹果的代码样本和互联网资源直接访问ivar,而不是使用合成访问器。在我看来,UILabel、uitextfield和UITextView经常出现这种情况再谈Objective-C中的self和instance变量,objective-c,Objective C,在一些书中,我注意到苹果的代码样本和互联网资源直接访问ivar,而不是使用合成访问器。在我看来,UILabel、uitextfield和UITextView经常出现这种情况 @interface MagicViewController : UIViewController { UITextField *aField; } @property (nonatomic, retain) UITextField *field; @implementation MagicViewContro
@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);
}
不使用访问器可以保证您访问的实际上是ivar字段,因为子类可以覆盖
.aField
,提供其他内容
这是你想要的还是不想要的,差别很大
这是示例代码避开访问器而支持直接访问的一个可能原因,但在任何给定情况下这样做的确切原因并不一定容易知道
另一个可能的原因是访问ivar速度更快,特别是在iOS上,周期来之不易。不使用访问器可以保证您访问的实际上是ivar字段,因为子类可以覆盖
.aField
,提供其他内容
这是你想要的还是不想要的,差别很大
这是示例代码避开访问器而支持直接访问的一个可能原因,但在任何给定情况下这样做的确切原因并不一定容易知道
另一个可能的原因是访问ivar的速度更快,特别是在iOS上,周期来之不易。在这种特殊情况下,任何一种方式都可以正常工作。他们喜欢在引用中定义所有内容,这样您就可以准确地看到正在发生的事情。在这种特殊情况下,任何一种方法都可以很好地工作。他们喜欢在参考资料中定义所有内容,这样您就可以准确地看到正在发生的事情。如果您有时间和愿望,可以给我一个简短的示例,说明直接访问ivar的必要性。这将是非常感谢,因为我看到“从来没有使用直接访问ivar”。如果你有时间和愿望,你能给我一个简短的例子,说明有必要直接访问ivar。这将是非常感谢,因为我看到“从来没有使用直接访问ivar”。很明显,访问速度更快。