c函数回调oc

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个有效方法》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,201评论 30 471
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,522评论 7 249
  • 1、加入百人计划我的目标就是学习怎么管理团队,当前的这次分享吸收非常大。作为一个管理者,明确自己所关注的重点,整体...
    小奋斗_3fbb阅读 347评论 1 4