2011年9月22日

Objective-C 遇到 method 撞名會發生什麼事....

這東西果然會這樣.....
A big weakness in Objective-C's weak typing

簡單的說,對一個 id 傳 method 很可能不是傳到你想要的那一個,
而是所有能見的 method 中找一個名字一樣的出來傳進去。
這個「所有能見」當然包含了你自己寫的、你 import 進來的,還有整個 foundation。

ok,你當然不會沒事把變數宣告成 id(你不會的,對吧?)
可是這種事情常常藏在這種地方:

NSArray *array;
// array assignment
[[array objectAtIndex:0] aMethod];

好可怕的對吧...
大部分情況是只要像這樣 cast 就搞定了

[(SpecifiedType*) [array objectAtIndex:0] aMethod];

可是如果這個 aMethod,還有跟它撞名的那個,
都是 class method的話,那就沒這麼簡單了....
解決之道有兩種,
第一種是你快改名吧,這是最好的方法。
不然就要用一個很噁心的方法,因為太噁心了我就不複述了,總之還是改名吧 -_-a

沒有留言:

張貼留言