CopyWithZone uygularken en iyi yöntem:
Herkes aşağıdaki yorum yapabilir copyWithZone:
, uygulama hakkında kafamda bazı şeylere açıklık getirmek için çalışıyorum
// 001: Crime is a subclass of NSObject.
- (id)copyWithZone:(NSZone *)zone {
Crime *newCrime = [[[self class] allocWithZone:zone] init];
if(newCrime) {
[newCrime setMonth:[self month]];
[newCrime setCategory:[self category]];
[newCrime setCoordinate:[self coordinate]];
[newCrime setLocationName:[self locationName]];
[newCrime setTitle:[self title]];
[newCrime setSubtitle:[self subtitle]];
}
return newCrime;
}
// 002: Crime is not a subclass of NSObject.
- (id)copyWithZone:(NSZone *)zone {
Crime *newCrime = [super copyWithZone:zone];
[newCrime setMonth:[self month]];
[newCrime setCategory:[self category]];
[newCrime setCoordinate:[self coordinate]];
[newCrime setLocationName:[self locationName]];
[newCrime setTitle:[self title]];
[newCrime setSubtitle:[self subtitle]];
return newCrime;
}
001:
Sınıf adı doğrudan yazmak için en iyi
[[Crime allocWithZone:zone] init]
[[[self Class] allocWithZone:zone] init]
kullanmalıyım?Kopyalama
[self month]
kullanmak için ok bugün ivan'ın ya da doğrudan bugün ivan'ın_month
yani erişim olayım ki?
CEVAP
Her zaman
[[self class] allocWithZone:zone]
bir kopyasını uygun sınıf oluşturma olduğundan emin olmak için kullanmanız gerekir. 002 gösterileri yüzden verdiğiniz örnek: Alt sınıflar[super copyWithZone:zone]
arar ve uygun sınıfı, super sınıf örneği olmayan bir örneğini geri almak için bekliyoruz.Ben özellik ayarlayıcısı (örneğin, bildirim oluşturma) daha sonra ekleyebilirim herhangi bir yan etkileri hakkında endişelenmenize gerek yok bu yüzden bugün ivan'ın doğrudan erişim,. Unutmayın, alt sınıfların herhangi bir yöntemi geçersiz kılmak için ücretsiz. Sizin örnekte, ıvar başına iki ekstra mesajlar gönderiyorsunuz. Aşağıdaki gibi uygulamak
Kod:
- (id)copyWithZone:(NSZone *)zone {
Crime *newCrime = [super copyWithZone:zone];
newCrime->_month = [_month copyWithZone:zone];
newCrime->_category = [_category copyWithZone:zone];
// etc...
return newCrime;
}
Eğer bugün ivan'ın kopyalamak ister elbette, onları korumak, ya da sadece ayarlayıcıları ne ayna onları atayın.
Nasıl belirli bir yöntem kullanarak Mo...
Eclipse yöntem parametreleri ipucu...
Bir şekilde Ruby yöntem bağımsız değiş...
Nasıl'tam olarak milisaniye cinsi...
't ıenumerable yok Saymak bir yön...