Понял это после большого количества поиска кода:
// Subclass NSWindow with overridden function
Class __NSWindow =
objc_allocateClassPair(objc_getClass("NSWindow"), "__NSWindow", 0);
class_addMethod(__NSWindow,
sel_registerName("canBecomeKeyWindow"),
(IMP)can_become_key_window_true, "B@:");
objc_registerClassPair(__NSWindow);
// Allocate a new __NSWindow
window = objc_msgSend((id)__NSWindow, sel_registerName("alloc"));
А затем can_become_key_window_true
определяется как:
static bool can_become_key_window_true() {
return true;
}
Я использую objc_allocateClassPair для создать подкласс объекта и вернуть Class
этого объекта. Затем я использую class_addMethod , чтобы переопределить метод canBecomeKeyWindow
. И, наконец, используйте objc_registerClassPair , чтобы зарегистрировать мой новый класс, прежде чем использовать его, как если бы я был обычным NSWindow
.