美文网首页
c函数回调oc

c函数回调oc

作者: 焱止殇 | 来源:发表于2017-10-20 11:38 被阅读43次

    1、c语言回调可以用self的静态传入调用方法,也可以用类设置delegate传出来,记得置nil

    static class objectSelf;
    
    objectSelf = self;
    
    void cFunction(){
        [objectSelf invokeOCFunction];
    }
    
    ps:记得在合适的地方把objectSelf置nil
    

    2、try catch 时要注意内存管理

    try catch 时要注意内存管理,MRC下可以增加@finally中release对象;

    但是在ARC中时,系统是在allocinit之后插入的内存管理代码,在trycatch一样会受到影响,这样会导致内存泄露(占用的栈内存,由系统管理,多了会影响app性能);
    解决办法是可以打开文件的-fobjc-arc-exceptions,让系统增加异常安全处理代码来跟踪清理对象,在objective-c++中,这个会默认开启。(备注:开启这个并不理想,这样的处理多了还会影响性能,因此oc中最好用error保证代码质量,而不是try-catch,而且oc中trycatch能捕获的异常我们基本都能预防,所以try catch很少用)
    例如下面的代码就有问题:

            @try{
                NSMutableArray * a = @[@"1",@"2"].mutableCopy;
                [a removeObjectAtIndex:3];
            }@catch(NSException * ex){
                NSLog(@"reason:%@",ex.reason);
            }
    

    可以用自动释放池来处理:

      for (int i = 0 ; i< 10000; i++) {
            @autoreleasepool{
                @try{
                    NSMutableArray * a = [[NSMutableArray alloc] initWithArray:@[@"1",@"2"]];
                    [a removeObjectAtIndex:3];
                }@catch(NSException * ex){
                    NSLog(@"reason:%@",ex.reason);
                }
            }
        }
    

    3、委托模式delegate

    自己写的委托模式下每次都要调用response方法,这个会影响性能,可以在setdelegate的时候,设置unsigned int:1 的结构体,能响应,设值为1,这样在response的时候判断是不是1就可以了

    typedef struct{
        unsigned int  canResponse :1;///可以表示0~1(位段,bitfield)
        unsigned int  canResponseEight : 8;///表示0~255
    
    }DelegateResponse;
    
    {
        DelegateResponse delegateResponse;
    }
    
    - (void)setDelegate:(id<AAAProtocol>)delegate{
        _delegate = delegate;
        delegateResponse.canResponse = [_delegate respondsToSelector:@selector(eat)];
    }
    
      if (delegateResponse.canResponse) {
            [self.delegate function];
        }
    
    

    4、尽可能少引入头文件

    优化编译速度,引入的头文件尽可能的少,比如只是用到类名,可以用@class

    参考资料:《编写高质量ios与os x代码的52个有效方法》

    相关文章

      网友评论

          本文标题:c函数回调oc

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