@
Vienta 我倒是覺得這些題目反映的東西都是一類的「你懂多少 C?」,Objective-C 運行時這些特性其實說白了就是優雅包裝的 C 實現而已(可能也有 C++,但是我 C++ 真是渣,就不妄加評論了)。
@
celiali 輸出 `[self class]`, `[super class]` 那道題目因爲我寫的時間太晚,太疲勞,搞反了……檢查了這麼多遍居然還沒檢查出來,真是慚愧
其實同理,`[super performSelector: performSelector:NSSelectorFromString(@"aSelectorName")];` 永遠執行的是 `self` 的 `-aSelectorName`。
比如下面這個程序就是永遠輸出「Upper: Oink began」
````
#import <Foundation/Foundation.h>
@
interface Base : NSObject
- (void)oink;
@
end@
implementation Base
- (void)oink {
NSLog(@"Base: Oink began");
NSLog(@"Base: Oink ended");
}
@
end@
interface Upper : Base
@
end@
implementation Upper
- (void)oink {
NSLog(@"Upper: Oink began");
[super performSelector:NSSelectorFromString(@"oink")];
NSLog(@"Upper: Oink ended");
}
@
endint main(int argc, const char * argv[]) {
@
autoreleasepool {
Upper * anUpper = [[Upper alloc] init];
[anUpper oink];
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
````