Разница между частной переменной экземпляра и свойством в расширении класса (Objective-c 2.0) - PullRequest
5 голосов
/ 22 декабря 2011

Каковы различия (если таковые имеются) между следующими фрагментами кода Objective-c 2.0:

// in MyClass.h
@interface MyClass
@private
    NSString *myString;
@end

и

// in MyClass.m
@interface MyClass ()
@property (nonatomic, copy) NSString *myString;
@end

@implementation MyClass
@synthesize myString;
@end

1 Ответ

6 голосов
/ 22 декабря 2011

ivar (первая) - это простая переменная, к которой нельзя получить доступ за пределами реализации интерфейса, в котором она создана (если используется директива @private), и не имеет синтезированных методов доступа.

Свойство (второе) представляет собой обернутый ivar, и к нему всегда можно получить доступ через создание экземпляра класса и синтезировать методы доступа (если используется директива @synthesize)

MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...