2013-02-27 48 views
3

我在Java的5年經驗之後開始學習Objective-C,並且不瞭解它的一些構造。這個Some_Object **是什麼意思?例如在此處的方法定義中:Objective-C中的雙指針意味着什麼?

- (NSString *)checkLastUpdate:(NSUInteger)loggedId 
returnMsgs:(NSMutableArray **)returnMsgs 
{ 
     .... 
if (returnMsgs) 
{ 
*returnMsgs = NewMsgs; 
} 
    } 

它是指向指針還是什麼?這是什麼原因使用這個?

+0

沒錯這就是指針到指針和它的使用允許一種修改無法返回的數據的方法。這很可怕,但對C(Objective-C)來說是必要的,因爲它缺少C++和Java的引用。 – trojanfoe 2013-02-27 09:19:54

+0

爲什麼它很可怕? – J2theC 2013-02-27 09:21:29

+1

因爲它容易出錯而且很醜。 – trojanfoe 2013-02-27 09:21:53

回答

5

這是Pointer -to-指針型,在C語言一樣的東西。

我不認爲這是一個很好的行爲,除了錯誤回調。 例如,我們調用一個函數,需要出錯的情況下,信息函數失敗:

- (id)handleData:(NSData *)inData error:(NSError **)outError; 
{ 
if (inData == NULL || [inData length] == 0) 
    { 
    if (outError) 
     *outError = [NSError errorWithDomain:kDataErrorDomain code:-1 userInfo:NULL]; 

我們可以這樣調用:

NSError *error = NULL; 
[self handleData:data error:&error]; 

if (error) { 
    // Handle error 
+0

'if(outError)'如何成爲真實的? – Petar 2015-10-30 16:08:11

1

NSMutableArray **意味着它的容器可以容納包含NSMutableArray的引用的地址,例如

NSMutableArray * obj1; //obj1 can store reference of a mutable array 
NSMutableArray ** obj2; // can contain address of obj1 that can store reference of a mutable array 

您可以在不同情況下使用它最重要的

  • 如果你想從一個函數返回多個對象(可以是一個錯誤的對象或別的東西)
0

這裏函數將雙指針NSMutableArray作爲輸出參數,並期望NSMutableArray實例將初始化爲零

我認爲foll虧欠的是用例利用雙指針的看過來,

-(void)functionName{ 
NSMutableArray *pArray = nil; 

NSString *update = [self checkLastUpdate:[self getLoggId] returnMsgs:&pArray ]; 

} 
+1

更經典的例子是使用由許多API方法返回的'NSError'對象。 – trojanfoe 2013-02-27 09:27:17