2011-10-13 70 views
0
@protocol I <NSObject> 
-(void) f; 
-(void) g; 
@end 

@interface C : NSObject <I> 
{ 
    id<I> i; 
} 
-(void) toA; 
-(void) toB; 
@end 

我正在使用此代碼,在這裏我使用協議I,我想知道什麼是 (ID < I> i)的意思和這個工作。Objective-C編程中「id <I> i」的含義是什麼?

+1

?我的意思是,打電話給你的對象A,B,F,G,我? – Cyrille

+0

這是一個樣本知道@protocol的工作,如果我正在採取A,B,F,G和我所以這是什麼錯我感到舒服與這些名字 –

+0

爲什麼不寫你的代碼已經縮小,然後呢? – Cyrille

回答

2

宣言:

MyClass<MyProtocol> * myVar; 

意味着類myVar的是MyClass的後代之一和additionaly實現MyProtocol協議的方法。 瞭解更多關於協議here

並在代碼

id<I> i; 

意味着「i」爲ID類型 - 即它可以是任何類型的對象(閱讀ID here), 但也符合協議的「我」 。

在你的樣品類的你的 「我」 必須實現

-(void) f; 
-(void) g; 

方法。

而且你可以用這樣的表述:你真的用__this__代碼

[i f]; 
[i g]; 
0

這意味着任何IVAR i類型(因此id),符合協議I

+0

你會提供一些關於它的更多信息。 –

+0

Here:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html – Cyrille

0

我是一個對象。它可以是任何類,只要該類符合協議I.這意味着類具有實例方法f和g,它們不帶任何參數並且不返回任何內容。這個類也必須採用正式協議一C類實際採用的協議一內部C類的方法,你可以寫:

i = self; 

雖然這可能不是通常是非常有用的。更有可能的是一些其他類採用協議我也一樣,或者至少你將℃的不同實例分配給我,像

i = [[C alloc] init]; 
0

ID是指附着在協議I.在這種情況下,你將一個變量然後需要我將是一個變量你可能想在這裏代表宣讀了其類實現協議一

0

How to use custom delegates in Objective-C

的ID我是你的委託財產。當你使用它。您可以調用您在協議中描述的委託方法之一,即方法f和g。在符合您給這些方法形成的協議的類中。

相關問題