1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- //
- // NSNotificationCenter+YYAdd.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 13/8/24.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import "NSNotificationCenter+YYAdd.h"
- #include <pthread.h>
- #import "YYKitMacro.h"
- YYSYNTH_DUMMY_CLASS(NSNotificationCenter_YYAdd)
- @implementation NSNotificationCenter (YYAdd)
- - (void)postNotificationOnMainThread:(NSNotification *)notification {
- if (pthread_main_np()) return [self postNotification:notification];
- [self postNotificationOnMainThread:notification waitUntilDone:NO];
- }
- - (void)postNotificationOnMainThread:(NSNotification *)notification waitUntilDone:(BOOL)wait {
- if (pthread_main_np()) return [self postNotification:notification];
- [[self class] performSelectorOnMainThread:@selector(_yy_postNotification:) withObject:notification waitUntilDone:wait];
- }
- - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object {
- if (pthread_main_np()) return [self postNotificationName:name object:object userInfo:nil];
- [self postNotificationOnMainThreadWithName:name object:object userInfo:nil waitUntilDone:NO];
- }
- - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo {
- if (pthread_main_np()) return [self postNotificationName:name object:object userInfo:userInfo];
- [self postNotificationOnMainThreadWithName:name object:object userInfo:userInfo waitUntilDone:NO];
- }
- - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo waitUntilDone:(BOOL)wait {
- if (pthread_main_np()) return [self postNotificationName:name object:object userInfo:userInfo];
- NSMutableDictionary *info = [[NSMutableDictionary allocWithZone:nil] initWithCapacity:3];
- if (name) [info setObject:name forKey:@"name"];
- if (object) [info setObject:object forKey:@"object"];
- if (userInfo) [info setObject:userInfo forKey:@"userInfo"];
- [[self class] performSelectorOnMainThread:@selector(_yy_postNotificationName:) withObject:info waitUntilDone:wait];
- }
- + (void)_yy_postNotification:(NSNotification *)notification {
- [[self defaultCenter] postNotification:notification];
- }
- + (void)_yy_postNotificationName:(NSDictionary *)info {
- NSString *name = [info objectForKey:@"name"];
- id object = [info objectForKey:@"object"];
- NSDictionary *userInfo = [info objectForKey:@"userInfo"];
-
- [[self defaultCenter] postNotificationName:name object:object userInfo:userInfo];
- }
- @end
|