Метод swizzling используется в следующем синтаксическом инициализаторе, но я не уверен в безопасности потоков для swizzling.Thread-safety метода swizzling
Что происходит, когда поток собирается вызвать метод, который должен быть опробован другим методом? Безопасно ли вы в любой момент подпрыгивать, а есть потоки, чтобы вызвать этот метод? Ответьте на официальные ссылки, пожалуйста. Благодаря
#import <dispatch/dispatch.h>
#import <objc/runtime.h>
@implementation MySingleton
static MySingleton * __singleton = nil;
+ (MySingleton *) sharedInstance_accessor
{
return (__singleton);
}
+ (MySingleton *) sharedInstance
{
static dispatch_once_t __once = 0;
dispatch_once(&__once, ^{
__singleton = [[self alloc] init];
Method plainMethod = class_getInstanceMethod(self, @selector(sharedInstance));
Method accessorMethod = class_getInstanceMethod(self, @selector(sharedInstance_accessor));
method_exchangeImplementations(plainMethod, accessorMethod);
});
return (__singleton);
}
@end
https://gist.github.com/MSch/943369
Что это точка этого кода? dispatch_once практически не наносит накладных расходов. На самом деле больно пари, чтобы быстрее проверить токен на дюжину (вероятно, еще больше) раз, чем это делать, чтобы сделать это swizzling. код тоже сложнее. –
«Ответ на официальные ссылки пожалуйста» звучит так, как будто вы хотите, чтобы кто-то искал документы для вас ... – Dave
Я отправил ответ, но должен сказать, что я не понимаю, чего вы пытаетесь выполнить, и почему вам нужно swizzling, чтобы сделать это. Объяснение этого поможет прояснить ваш вопрос. –