2013-04-23 11 views
10

Yeni Objective-C derleyicileri, yazılan koleksiyonlar sağlamak için başka şeylerin yanı sıra kullanılan 'instancetype' anahtar sözcüğünü sunar. . .'objectWith' yöntemlerinde 'instancetype' anahtar sözcüğünün amacı?

Sınıflarda 'objectWith' tipi yöntemlerde kullanan başka bir instancetype amacını gördüm. Örneğin:

@interface Car 

    +(instancetype)carWithWheels:(NSArray*)wheels; 

@end 

gerekçe değil 'objectWith' yöntemleri için, derleyici initWith yöntemlerle kontrol türünü yapacak olmasıydı. Yazma olasılığı daha kolay olmasının yanı sıra, gerçek sınıf adı yerine 'instancetype' kullanımının yararı nedir? Ör:

@interface Car 

    +(Car*)carWithWheels:(NSArray*)wheels; 

@end 

cevap

35

instancetype kullanarak, alt sınıfların alt sınıfın bir nesnesini döndüreceğini söylüyorsunuz.

biz

@interface Car 

    +(instancetype)carWithWheels1:(NSArray *)wheels; 
    +(Car *)carWithWheels2:(NSArray *)wheels; 

@end 

ve +[VolkswagenBeetle carWithWheels1:]VolkswagenBeetle bir örneğini dönmek için garanti

@interface VolkswagenBeetle : Car 

@end 

varsa; Ancak +[VolkswagenBeetle carWithWheels2:], Buick, Caddilac veya ChittyChittyBangBang olabilir.

+0

teşekkürler. . . Temel sınıfta bir yöntem kullanıyorum, genellikle bu soyutlama seviyesinde çalışmayı umuyorum. . Yine de, bunun nasıl yararlı olabileceğini görebiliyorum. –

2

Sen Car alt sınıf ve hala instancetype yararlanabilir. Tabii ki bunu id kullanarak elde edebilirsin, ama türetmeden kazandığın tip kontrolünü kaybedeceksin. Sadece her yerde, mevcut sınıfın nesnesini (bu alt sınıfın alt sınıfları döndürme nesnesi), özellikle kolaylık yöntemlerinde ve malzemelerinde döndürmesi gerekiyor.

Harika bir answer which could help var.

İlgili konular