2013-05-12 40 views
-5

所以,我得到了一個類中聲明的2個變量,我們稱之爲model.h,並且在這個類中我初始化類CarRoad的實例。如果我想要Car知道關於 road還有什麼其他選擇比通過參考RoadCarModel在這種情況下很好嗎?Obj-C:通過引用的替代方案

+0

'.h'是指示頭文件的文件擴展名 - 您不會命名實際的類Car.h或Road.h。 – Caleb 2013-05-12 00:56:34

+0

Caleb:這是爲了清晰起見 - 因爲類通常有一個頭文件實現文件 – 2013-05-12 01:00:03

+0

真的沒有必要 - 只需使用類名。 – Caleb 2013-05-12 01:06:40

回答

1

據我所知,傳遞指針指針並不是一個很好的設計模式,可以在整個應用程序中使用。它只保留在objective-c中,僅用於選擇少量操作,即NSError。請參閱下面的主題中的bbum的回覆。

Arguments by reference in Objective-C

來看在接受和它的作者我會說這是相當不錯的建議,但也許不是「福音」。你當然可以通過指針指向所有你想要的指針,但它可能不是最好的方法。

另一種方法是考慮你正在考慮通過引用傳遞的值(意思是指向指針),然後考慮方法/函數的設計,以便可以將這些值封裝到一個類中從你的方法/函數返回。

+1

我不會考慮通過引用傳遞意味着'指針指針';在正常使用中,它意味着傳入一個指針。任何Obj-C類都是通過引用傳遞的,儘管在極少數情況下你想要修改引用,比如你已經識別出的'NSError'。 – sapi 2013-05-12 02:04:51

+0

我認爲這是OP的意思,但我不確定。 – Aaron 2013-05-12 05:01:40

+0

@sapi,你是對的。語義沒什麼混淆,但我的意思是「指向指針」,而不是通過引用傳遞。我明白obj-c對象總是通過引用傳遞。我已經修改了我的答案。 – Aaron 2013-05-12 05:41:30

0

確實沒有其他選擇。對象是總是通過Objective-C中的指針訪問。沒有辦法聲明變量的變量,您只能創建引用對象的變量。

+0

我在想如果有其他替代方案,比如我如何使用Singelton等設計我的課程,但singelton在這種情況下不適合。 – 2013-05-12 01:16:10

1

在Objective-C中,對象總是按引用傳遞,但是可以通過仔細設計類來減輕對象的影響。

例如,NSStringNSNumber總是按引用傳遞,但您可以將它們視爲按值傳遞,因爲它們是不可變的。您不能更改NSString(僅限於NSMutableString)或NSNumber,因此,您是按價值還是按照參考值傳遞並不重要。

同樣,複製對象並使用-isEqual:以後比較它們可以模擬傳遞值。 NSDictionary是否這樣 - -setObject:forKey:複製密鑰並僅使用副本,而-objectForKey:使用-isEqual:-hash來比較密鑰。

對於你的情況,如果你的道路「地圖」是固定的,並且你不需要將道路連接回去,你或許可以使Road對象不可變(或者至少從未在加載之後發生變異)汽車。如果你這樣做,那麼通過引用傳遞實際上是一個有用的優化,而不是等待發生的錯誤。