2
我正在开发适用于Mac OS X的屏幕保护程序,我需要做一些方法混写,所以我做了一个小实验:为什么方法swizzling被屏幕保护程序绕过?
@implementation CAHTTPCookieStorage
+ (void) highjack {
NSLog(@"Attempting to highjack cookies.");
Class originalClass = [NSHTTPCookieStorage class];
Method originalMeth = class_getClassMethod(originalClass, @selector(sharedHTTPCookieStorage));
Method replacementMeth = class_getClassMethod([self class], @selector(patchedSharedHTTPCookieStorage));
method_exchangeImplementations(originalMeth, replacementMeth);
}
+ (NSHTTPCookieStorage*) patchedSharedHTTPCookieStorage {
NSLog(@"Cookies have been highjacked!!!!");
return [CAHTTPCookieStorage patchedSharedHTTPCookieStorage];
}
@end
我从AppDelegate.init我的应用程序调用CAHTTPCookieStorage.highjack() ()和我ScreensaverViewSubclass.init(...)的屏幕保护程序。在预览模式下(在系统首选项中)运行我的应用程序或屏幕保护程序时,它可以正常工作,但是当我将其作为正确的屏幕保护程序运行时,我可以看到消息“试图强行挂断cookie”。但从来没有“曲奇已被劫持!!!!”。
任何想法可能会出错?也许是线程的问题?每个线程都在调整方法吗?