Опять о себе и переменных экземпляра в Objective-C - PullRequest
1 голос
/ 22 июля 2011

В некоторых книгах, примерах кода 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);

}

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Отсутствие средства доступа гарантирует, что то, к чему вы обращаетесь, фактически является полем ivar, поскольку подкласс может переопределить .aField, предоставляя что-то еще.

В зависимости от того, что вы хотите, или нет, зависитдико.

Это одна из возможных причин, по которой образец кода отказывается от средств доступа в пользу прямого доступа, но точно, почему это делается в любом конкретном случае, не всегда легко понять.

ДругойВозможная причина в том, что доступ к ivar быстрее, и, в частности, на iOS циклы выигрывают с трудом.

0 голосов
/ 22 июля 2011

В любом случае, в любом случае, все будет работать нормально.Им нравится определять все в ссылках, чтобы вы могли точно видеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...