XCode – properties w Objective-C – warningi kompilacji

Stawiając swoje (ciągle jeszcze dosyć początkujące) kroki w świecie Objective-C natrafiłem na ciekawy problem podczas kompilacji programu w Objective-C z wykorzystaniem mechanizmu

@property

Ostrzeżenia, które generował XCode zaciekawiły mnie i skupiły na sobie moją uwagę.

Xcode - błąd kompilacji properties
Xcode - błąd kompilacji properties

Po chwili śledztwa znalazłem przyczynę takiego zachowania.

Kod który generował ostrzeżena miał postać:

@interface Route : NSObject {
	NSArray* stops;
	NSString* name;
	int _id;
}
@property(nonatomic, readwrite) NSArray* stops;
@property(nonatomic, readwrite) NSString* name;
@property(nonatomic, readwrite) int _id;

Ostrzeżenia kompilatora pojawiały się w pliku z implementacją:

XCode - warningi kompilacji - @property
XCode - warningi kompilacji - @property

Poprawny kod (nie będący przyczyną takich błędów) ma postać:

@interface Route : NSObject {
	NSArray* stops;
	NSString* name;
	int _id;
}
@property(nonatomic, readwrite, retain) NSArray* stops;
@property(nonatomic, readwrite, retain) NSString* name;
@property(nonatomic, readwrite) int _id;

Wnioski:
Przyczyną takiego zachowania, jest błąd programisty. Developer musi zdefiniować metodę przypisywania wartości atrybutów klasy będących wskaźnikami na jakieś obiekty. Do dyspozycji mamy 3 możliwości:

retain
assign
copy

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.