美文网首页
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

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

  • Kotlin多参数回调

    1、单个参数回调: 2、多个参数回调: 3、java中调用Kotlin的回调 1、java中调用Kotlin回调 ...

  • JNI&NDK开发最佳实践(十):补充要点(持续更新)

    一、在C中实现Java回调函数 我们知道在C中通过传递函数指针可以轻易实现函数回调的效果,而在java中则一般是通...

  • 微信小程序学习2.js基本使用之block回调函数使用

    微信小程序自学Demo地址 对于oc或者swift来说,函数回调是必不可少的,那么在微信小程序中如何使用block...

  • python 函数回调

    回调函数 def apply_async(func, args, , callback):# Compute th...

  • flutter 函数回调

    习惯使用java的同学一定经常使用java的接口回调,flutter本事不支持内部类,所以无法像java一样实现接...

  • OC学习总结

    # 熟悉 Objective-C ## 1. OC 的起源 OC 的方法(本质上讲是消息)在运行时决定。使用函数调...

  • Promise原理解析,使用ES5实现Promise

    Promise js的单线程特性导致大量的异步操作,异步操作我们通常使用函数回调的方式实现。大量的函数回调会产生我...

  • Vue3_10(认识watch侦听器)

    watch 需要侦听特定的数据源,并在单独的回调函数中执行watch第一个参数监听源watch第二个参数回调函数c...

  • ios之js交互

    js交互无非两种,js调oc,oc调js。 1、先说oc调js,就一句话: NSString*messod = [...

网友评论

      本文标题:c函数回调oc

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