Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
再谈Objective-C中的self和instance变量_Objective C - Fatal编程技术网

再谈Objective-C中的self和instance变量

再谈Objective-C中的self和instance变量,objective-c,Objective C,在一些书中,我注意到苹果的代码样本和互联网资源直接访问ivar,而不是使用合成访问器。在我看来,UILabel、uitextfield和UITextView经常出现这种情况 @interface MagicViewController : UIViewController { UITextField *aField; } @property (nonatomic, retain) UITextField *field; @implementation MagicViewContro

在一些书中,我注意到苹果的代码样本和互联网资源直接访问ivar,而不是使用合成访问器。在我看来,UILabel、uitextfield和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);

}

不使用访问器可以保证您访问的实际上是ivar字段,因为子类可以覆盖
.aField
,提供其他内容

这是你想要的还是不想要的,差别很大

这是示例代码避开访问器而支持直接访问的一个可能原因,但在任何给定情况下这样做的确切原因并不一定容易知道


另一个可能的原因是访问ivar速度更快,特别是在iOS上,周期来之不易。

不使用访问器可以保证您访问的实际上是ivar字段,因为子类可以覆盖
.aField
,提供其他内容

这是你想要的还是不想要的,差别很大

这是示例代码避开访问器而支持直接访问的一个可能原因,但在任何给定情况下这样做的确切原因并不一定容易知道


另一个可能的原因是访问ivar的速度更快,特别是在iOS上,周期来之不易。

在这种特殊情况下,任何一种方式都可以正常工作。他们喜欢在引用中定义所有内容,这样您就可以准确地看到正在发生的事情。

在这种特殊情况下,任何一种方法都可以很好地工作。他们喜欢在参考资料中定义所有内容,这样您就可以准确地看到正在发生的事情。

如果您有时间和愿望,可以给我一个简短的示例,说明直接访问ivar的必要性。这将是非常感谢,因为我看到“从来没有使用直接访问ivar”。如果你有时间和愿望,你能给我一个简短的例子,说明有必要直接访问ivar。这将是非常感谢,因为我看到“从来没有使用直接访问ivar”。很明显,访问速度更快。