山獅的條件類別
回答
NSColor *_NSColor_colorWithCGColor_(Class self, SEL cmd, CGColorRef cgColor)
{
// make an NSColor outta `cgColor` and return it
return nsColor;
}
// inside some initialization code
if ([[NSColor class] respondsToSelector:@selector(colorWithCGColor:)]) {
// on ML, don't do anything
} else {
// older system, add your own category
class_addMethod(objc_getMetaClass("NSColor"), @selector(colorWithCGColor:), (IMP)_NSColor_colorWithCGColor_, "@@:@");
}
我認爲這也可能有助於發佈我所做的基於H2CO3的答案。
NSColor+CGColorAdditions.m
變成了:
static CGColorRef _NSColor_CGColor_(Class self, SEL cmd) {
return nil; // TODO: Do something
}
static NSColor* _NSColor_colorWithCGColor_(Class self, SEL cmd, CGColorRef aColor) {
return nil; // TODO: Do something
}
__attribute__((constructor))
static void initialize_NSColor_CGColorAdditions() {
if (![[NSColor class] respondsToSelector:@selector(colorWithCGColor:)]) {
class_addMethod(objc_getMetaClass("NSColor"), @selector(colorWithCGColor:), (IMP)_NSColor_colorWithCGColor_, "@@:@");
}
if (![[NSColor class] instancesRespondToSelector:@selector(CGColor)]) {
class_addMethod(objc_getClass("NSColor"), @selector(CGColor), (IMP)_NSColor_CGColor_, "@@:");
}
}
我不太確定你想爲此使用'constructor',因爲不清楚它何時會被調用與正在建立的運行時相關。 A ['+ load'](http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/doc/uid/20000050-加載)類別的方法可能是適當的地方做到這一點。 – 2012-08-14 14:31:39
@ W'rkncacnter據我所知,構造函數在main之前調用。 – 2012-08-14 14:45:09
@ H2CO3:對 - 我擔心的是它們在構建運行時之前被調用,但我不確定何時會發生這種情況。當libobjc被加載時它是有意義的,所以這可能不是一個問題,但是'+ load' _is_明確地用於在main之前調用類。 – 2012-08-14 18:26:15
- 1. 山獅的Twitter.framework?
- 2. 日食山獅子滾動條擴大
- 3. 如何在山獅
- 4. 在OSX 10.8.3山獅
- 5. AppleScript的,POSIX文件名和山獅
- 6. 光標顏色X山獅
- 7. RegisterEventHotKey CMD + TAB在山獅
- 8. OpenNI 2 OS X山獅
- 9. 山獅變化PHP位置
- 10. Xcode 4.6在山獅碰撞
- 11. 問題與山獅sed
- 12. 山獅PHP梨和PECL
- 13. 山獅Postgres無法連接
- 14. jenkins山獅子服務器
- 15. 山獅同步NSUserNotification提醒
- 16. 山獅和AuthorizationExecuteWithPrivileges警告
- 17. 紅寶石1.92和山獅
- 18. 山獅子分享服務
- 19. 使用隱藏滾動條將CSS懸停在獅子/山獅上
- 20. 關於山獅的紅寶石更新
- 21. 山獅的'/var/log/secure.log'在哪裏
- 22. pg在山獅上的'0.14.0'失敗
- 23. mac上的獅子山32位電腦
- 24. 來自Safari的山獅通知中心
- 25. Xcode連接的網絡共享列表獅子/山獅子
- 26. Phonegap,科爾多瓦,xCode 4.4和山獅
- 27. 在山獅上安裝FFmpeg 1.1.2「火花」
- 28. 港口安裝顛覆在OSX山獅
- 29. 無法在山獅上安裝Imagemagick
- 30. 固定osascript剪貼板OSX山獅
感謝。你會在哪裏推薦這個初始化代碼?它可以在分類文件中靜態執行嗎? – hpique 2012-08-14 10:47:55
@hgpc可能是應用程序的第一行:didFinishLaunchingWithOptions:方法。 – 2012-08-14 11:05:27
真的嗎?我把它放在一個+加載方法。 – 2012-08-14 16:05:19