Честно говоря, мне проще использовать "приватные" свойства чтения-записи, а не суетиться с иварами вообще:
MyClass.h
@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSArray * someArray; // Public
@end
MyClass.m
@interface MyClass () // Class extension
@property (nonatomic, copy, readwrite) NSArray * someArray; // "Private"
@end
@implementation MyClass
@synthesize someArray = someArray_;
- (id)init
{
self = [super init];
if (self != nil)
{
self.someArray = ...; // Array initialization
}
return self;
}
- (void)dealloc
{
[someArray_ release];
[super dealloc];
}
@end
Нет необходимости в иваре! Современная среда выполнения автоматически их синтезирует. Ваше свойство доступно только для чтения извне (т. Е. Другим классам), но внутренне вы объявили свойство как доступное для чтения и записи, чтобы вы могли использовать удобство доступа к синтезированным свойствам.
(Конечно, я все еще объявляю явный синтез ivar - в этом примере someArray_
- для использования в -dealloc
, поскольку есть веские причины не использовать свойства в -dealloc
и, возможно, в -init
.)