2012-02-14 14 views
8

Apple'ın belgelerine bakıp Kakao tasarım kalıplarını okurken kafam karıştı. copyWithZone: Apple belgelerinde, okur:Kopyalama veya fotokopi kopyalamaWithZone: veya ikisini birden mi?

Bu yöntem o kadar sınıf nesneleri NSCopying protokole uyan bir nesneye ihtiyacınız durumlarda kullanılabilir vardır. örneğinde, bu yöntem bir sınıf nesnesini NSDictionary nesnesinin anahtarı olarak kullanmanızı sağlar. Bu yöntemi geçersiz kılmamalısınız.

copy için bu okur:

Bu NSCopying protokolü benimsemesi sınıflar için bir kolaylık yöntemidir. copyWithZone: için bir uygulama yoksa bir istisna ortaya çıkar. NSObject, NSCopying protokolünü kendisi desteklememektedir. Alt sınıflar protokolü desteklemeli ve copyWithZone: yöntemini uygulamalıdır. CopyWithZone: yönteminin alt sınıfı sürümü, alt sınıfı doğrudan NSObject öğesinden düşmedikçe, uygulamasının dahil edilmesi için ilk önce mesajını göndermelidir. Kakao Design Patterns içinde örneklerde

, onlar copyWithZone: ve mutableCopyWithZone: geçersiz ancak NSCopying protokolüne uygun zaman copy geçersiz kılmaz. Özel alt sınıfımı bir anahtar olarak NSDictionary kullanmak istiyorsam yapmam gereken şey bu mu?

Veya copy'u geçersiz kılar mıyım?

Benzer şekilde, [myClass copy] yaparsam, bu özel alt sınıfım için copyWithZone: veya copy mu? Teşekkürler.

cevap

14

Oldukça basit: copy'un varsayılan uygulaması, copyWithZone:'u NULL argümanıyla çağırır. Yani her zaman copyWithZone: uygulamalısınız. Ancak, bellek bölgeleri (bildiğim kadarıyla) iOS'ta kullanılmadığından, bölgeyi hiçbir varsayım yapmadan yok saymalısınız.

Düzenleme: Eğer yanı copy uygulayabilir ayrıntılı bilgi vermekten, ancak NSDictionary iOS'taki arayacak bunlardan hangisinin asla bilemezsiniz çünkü copyWithZone: uygulamalıdır 6.

Sen üst sınıf kolaylık kullanmaya devam edebilirsiniz
0

yöntem, olduğu gibi, hiçbir şey yapmaz ama her durumda copyWithZone:'u çağırır.

Bu, herhangi bir kolaylık yöntemi için geçerli olmalıdır. Bunun yerine hangi yöntemi çağırdıklarını ve geçersiz kılmayı öğrenmelisiniz. Ayrıca yukarıda da belirtildiği gibi, bölgeler artık kullanılmamaktadır, ancak yöntem hala uyumluluk ve tarihsel nedenlerden dolayı bu parametreye sahiptir.

İlgili konular