Istnieją dwie możliwości dla konstruktorów w Objective C/kakao:Dlaczego użyjesz konstruktora metody klasowej w porównaniu z alokacją/init?
1. konstruktora klasy
Product *product = [Product productWithIdentifier:@"Chocolate"];
// Use product
2. Alloc/init Konstruktor
Product *product = [[Product alloc] initWithIdentifier:@"Chocolate"];
// Use product
[product release];
Co zrobić
- Używam metody klasy tylko dlatego, że wygląda czystiej i nie potrzebujesz wydania.
- Widzę dużo alokacji/init - co jest zaletą robienia tego w ten sposób?
Moje pytanie
- Która z nich jest lepsze? Czy to tylko kwestia gustu?
Kod
Dla kontekście klasy wyrobów miałby następujące:
+(Product *)productWithIdentifier:(NSString *)identifier_ {
return [[[[self class] alloc] initWithIdentifier:identifier] autorelease];
}
-(Product *)initWithIndentifier:(NSString *)identifier_ {
self = [super init]
if (self) {
identifier = identifier_;
}
return self;
}
Tak blisko między tymi dwiema odpowiedziami, ale jest to trochę lepsze, ponieważ wspomina o problemie z pamięcią śladu. Ale znowu ta druga odpowiedź wspomina o "nawiązywaniu" połączeń. Chciałbym móc wybrać obie! –
Ulepszyłem odpowiedź Sergio, aby to zrekompensować ;-) – DarkDust