/*单例*/
+ (instance)sharedInstance
{
static dispatch_once_t predicate;
static id instanceObj = ni;
dispatch_once(&predicate, ^{
instanceObj =[ [self alloc] init];
});
return instanceObj;
}
/*类,方法,协议*/
//Class反射
NSString classStr = NSStringFromClass(objClass);
Class classObj = NSClassFromString(classStr);
//SEL反射
NSString selStr = NSStringFromSelector(selectorObj);
SEL selectorObj = NSSelctorFromString(selStr);
//判断某个类是否实现了某协议
[classObj conformsToProtocol:@protocol(protocolxxx)];
//判断类是否响应某方法
[classObj respondsToSelector:selectorxxx];
//获取类下某方法
Method inm = class_getClassMethod([UIImage class], @selector(imageNamed:));
//方法替换
method_exchangeImplementations(inm, inmNew);
/*Block*/
success:(void (^)(id responseObj))success
- (void)blockTest:(void(^)(NSString *str))block{ }
[self blockTest:^(NSString *str) { }];
typedef void (^blockHandle)(id obj);
/*多线程*/
//GCD
dispatch_async(dispatch_get_main_queue(), ^{
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
//NSOperation NSOperationQueue
@interface opClass : NSOperation
@end
@implementation opClass
-(void)main
{
xxxx
}
@end
opClass *opObj = [[opClass alloc] init];
NSOperationQueue *opq = [[NSOperationQueue alloc] init];
[opq addOperation:opObj];
//队列中的op并发执行
//线程锁可以用 NSLock 之类, 操作前先lock,操作完unlock
//串行 1.setMaxConcurrentOperationCount,设置为1或 operation addDependency 设置依赖
//Hook,第三方库 Aspects
[UIView aspect_hookSelector:@selector(layoutSubviews)
withOptions:AspectPositionBefore
usingBlock:^(id<AspectInfo> info) {
}
error:nil];