2009-09-06 9 views

cevap

11

, yıldız gerekmez. id Çünkü

@interface Eat : NSObject<Eating> { 
} 
- (id<Eating>)me; 
@end 
+1

Yıldız işareti değil, Asteriks: http://en.wikipedia.org/wiki/Asterix;) (beni aldı Bu yorumu doğrulamak için üç kez!) – dreamlax

0

kaldır id * ve kimliği ile değiştirin. kimlik zaten bir işaretçi.

1

Tamam .. cevabı "* id" yerine "id" dir.

+0

Size verilen cevaplardan birini kabul etmelisiniz. –

+0

Neden downvote? Bunu ilk olarak ilan etti çünkü problemi kendisi çözdü. –

0

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

+0

bir nesneye bir işaretçi ** arasındaki fark ** ve ** kimliği ** nedir? –

+0

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 * ... –

1

(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.

+2

'id'' struct objc_object * 'değil,“ NSObject * 'için bir yazım hatasıdır. Fark önemli. – dreamlax

İlgili konular