ios 判断method是否第一次调用

作者: 为之则易ing | 来源:发表于2017-10-30 16:53 被阅读87次

一、需求:在第一次调用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

代码块可参考:http://www.jianshu.com/p/9409d3310fba

https://github.com/GitHubXuLiying/First

相关文章

网友评论

  • 玉思盈蝶:在方法一中写:if (First_ly) {
    NSLog(@"第一次调用执行");
    }就行?
    玉思盈蝶:@在北京做开发的日子 :+1:
    为之则易ing:@玉思盈蝶 是的,只有第一次会执行

本文标题:ios 判断method是否第一次调用

本文链接:https://www.haomeiwen.com/subject/tktmpxtx.html