[問題] 請問如何做動態繫結
Objective-C的說明文件
說如果傳入物件的Method 沒有相關定義
也只是回傳nil物件 不會當掉
但我實際測試的結果剛好相反
我傳入"有定義"的Method
他反而出現紅色驚嘆號 說找不到
當然不是單純的函式呼叫 出現這種問題
那一定是我眼花 有Bug沒找出來
會出現這種問題 是在我使用動態繫結的時候
譬如兩個Class Foo 與 Bar
其中Bar 繼承 Foo
我宣告 Foo *obj = [[Bar alloc]init];
則我執行 [obj bar /*Bar裡定義的Method*/];
就會出現紅色驚嘆號 說Class Foo裡找不到這個Method
為避免中文表達不清楚 我使用一簡單程式例子說明
我使用的IDE是XCode4.3
// Foo.h
@interface Foo : NSObject
@end
//Foo.m
#import "Foo.h"
@implementation Foo
@end
// Bar.h
#import "Foo.h"
@interface Bar : Foo
- (void)barRun;
@end
// Bar.m
#import "Bar.h"
@implementation Bar
- (void)barRun{
// NOP
}
@end
好了 然後我執行以下程式碼
Foo *obj = [[Bar alloc]init];
[obj barRun];
出現紅色驚嘆號
IDE直接檔掉 說Foo Class裡面找不到barRun這個Method
他那麼雞婆幹嘛 教學文件不是說 找不到Method就回傳nil嗎
------------------------------------------------------
不要吹毛求疵 雞蛋裡挑骨頭找程式碼有問題了
這只是隨手打打一個簡單的例子
況且我使用以下方法重新執行barRun 如下
[obj performSelector:@selector(barRun)]
沒有問題 obj在執行時期 真的可以動態繫結到 Bar這個Class
請問 說明文件講的 沒有定義相關Method就回傳nil
這個強大的功能怎麼不見了
請問這是XCode4.3的新功能
避免初心的使用者呼叫未定義的Method嗎
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.139.230
推
03/06 10:57, , 1F
03/06 10:57, 1F
咦?等一下 我Foo.h 跟Bar.h都加進來了 一樣是這個問題
況且沒加進來的話 早在Foo *obj = [[Bar alloc]init];
這一行就出錯了
請問是哪個.h檔也要加進來呢
※ 編輯: wemee 來自: 60.250.139.230 (03/06 11:05)
推
03/06 11:39, , 2F
03/06 11:39, 2F
→
03/06 11:41, , 3F
03/06 11:41, 3F
→
03/06 11:42, , 4F
03/06 11:42, 4F
→
03/06 11:43, , 5F
03/06 11:43, 5F
謝謝 原來是ARC的關係
我在該檔案的compiler flag加上-fno-objc-arc
就可以了 變成只有警告而已
只是物件的生命要自己控制好
※ 編輯: wemee 來自: 60.250.139.230 (03/06 11:58)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章