Yukarıdaki Objective-C kod parçasında, neden "return self self", "Uyumsuz işaretçi türünden döndür" uyarısı ile sonuçlanır? Uyumsuz işaretçi türü nedir ve nasıl düzeltilir?Objective-C Protokolü Madness - protokole dayanarak nesne nasıl döndürülür?
cevap
, yıldız gerekmez. id
Çünkü
@interface Eat : NSObject<Eating> {
}
- (id<Eating>)me;
@end
Yıldız işareti değil, Asteriks: http://en.wikipedia.org/wiki/Asterix;) (beni aldı Bu yorumu doğrulamak için üç kez!) – dreamlax
kaldır id * ve kimliği ile değiştirin. kimlik zaten bir işaretçi.
Tamam .. cevabı "* id" yerine "id" dir.
Size verilen cevaplardan birini kabul etmelisiniz. –
Neden downvote? Bunu ilk olarak ilan etti çünkü problemi kendisi çözdü. –
Sen kullanımda kapalı hafifçe vardır - bu:
- (id<Eating>)me { return self; }
(Eğer bir nesneye değil, bir işaretçi id dönüyor çünkü). id
bir işaretçi kendisi olduğu için
bir nesneye bir işaretçi ** arasındaki fark ** ve ** kimliği ** nedir? –
Aslında hiçbiri yoktur - bu yüzden kodunuz çalışmadı. (NSObject *) ve (id) zaten aynı şeydir (gerçekten bu tartışma için yeterince yakın değil). Bu yüzden (id *) dediğiniz zaman (NSObject **). Evet, bu id ve Sınıfın her ikisini de kullanmadığınız nesnelerdir * ... –
(bazı küçük farklılıklar olsa da) esasen NSObject *
olduğunu. Eğer self
döndüğünüzde Böylece, sen -(NSObject *)
dönüyor. Ne var NSObject **
gibidir id *
olduğunu.
'id'' struct objc_object * 'değil,“ NSObject * 'için bir yazım hatasıdır. Fark önemli. – dreamlax
@protocol Kullanımı - Yalnızca ihtiyacınız olan yöntemlerden ziyade, bu nesneler üzerinde NSObject yöntemlerini kullanmanıza izin verir. –
Kornel