一、需求:在第一次调用method1时调用另外一个method2。再次调用method1时不再调用method2;
二、解决:
方法1、添加全部变量 很简单,缺点要维护全局变量。 如果对象里有多个这样的需求,需要添加多个变量。不方便。
方法2、添加NSObject+addtion.h
代码:
#import <Foundation/Foundation.h>
#define First_ly [self firstWithSEL:_cmd]
#define dispatch_first_ly(block) if(First_ly){block();}
@interface NSObject (LYAddtion)
@property(nonatomic,strong) id tempObject_ly;
-(BOOL)firstWithSEL:(SEL)selector;
@property(nonatomic,strong) NSMutableArray *firstCachArray;
@end
#import "NSObject+LYAddtion.h"
#import <objc/runtime.h>
@implementation NSObject (LYAddtion)
-(BOOL)firstWithSEL:(SEL)selector{
if (self.firstCachArray == nil) {
self.firstCachArray = [[NSMutableArray alloc] init];
}
if ([self.firstCachArray containsObject:NSStringFromSelector(selector)]) {
return NO;
}else{
[self.firstCachArray addObject:NSStringFromSelector(selector)];
return YES;
}
}
-(void)setFirstCachArray:(NSMutableArray *)firstCachArray{
objc_setAssociatedObject(self, @selector(firstCachArray), firstCachArray, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSMutableArray *)firstCachArray{
return objc_getAssociatedObject(self, _cmd);
}
@end
三、使用
if (First_ly) {
NSLog(@"第一次调用执行");
}
或者
dispatch_first_ly(^{
NSLog(@"第一次调用执行");
})
为了便于开发写了个代码块:使用方便
QQ20171030-164122-HD.gif
网友评论
NSLog(@"第一次调用执行");
}就行?