Разница между частной переменной экземпляра и свойством в расширении класса (Objective-c 2.0)
Каковы различия (если таковые имеются) между следующими фрагментами кода 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 ответ
Решение
Ivar (первый) - это простая переменная, к которой нельзя получить доступ из области реализации интерфейса, в котором она создана (если используется директива @private), и не имеет синтезированных методов доступа.
Свойство (второе) представляет собой завернутый ivar, и к нему всегда можно получить доступ через создание экземпляра класса и синтезировать методы доступа (если используется директива @synthesize)
MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter