iOS中我們遇到雙指針,通常情況下我們是為erorr賦值例如:- (nullable NSDictionary*)attributesOfItemAtPath:(NSString )path error:(NSError *)error
那么”**”是干什么的呢?我們可以用一句話來描述:
只要看到一個方法的參數類型是**,此方法就是要給參數賦值
1.我們先來看一個普通的例子 
輸出為: 
輸出不是456。由此可見這樣賦值是給參數賦不上值的,因為當我們把一個參數傳到一個方法里面的時候,系統內部會做一個事情,系統會拷貝一個指針指向theStr指向的字符串對象。而“str = @”456””代表str這個指針指向了@”456”這個對象。而不是theStr這個指針指向了@”456”。在方法里的指針都是這樣做的。
2.在C語言里我們為參數賦值,會傳一個地址作為參數,&符號為取址運算符,&num為num的地址。系統也會拷貝一個指針,但是拷貝的指針指向的是num的地址。下例中*okNum是一個int類型的指針,它指向的是&num(num的地址)。通過修改指針指向的地址達到修改參數的目的。

輸出為: 
3.在OC中我們的對象的指針已經帶了一個*號,所以就會出現雙指針的情況。*str指向的是*theStr指向的內存地址。*str指向了@”456”說明指針 *theStr指向的地址改成了@”456”.及theStr的值變成了@”456”。 
輸出為: 
新聞熱點
疑難解答