iOS开发写bug日常

1、传入block的函数,注意各个return分支,都要block()

- (void)POSTwithURL:(NSString *)urlString completionHandler:(void(^)())handler {
    if (...) {
        handler();
    } else if (....) {
        handler();
    } else {
        handler();
    }
}

如果某种情况忘了回调,调用方可能就会一直等待回调。特别是多个异步函数嵌套,分支复杂时;

 

2、这种情况会死锁

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    [self POSTwithURL:@"http://www.baidu.com" completionHandler:^{
        
        
        dispatch_semaphore_t semaphore1 = dispatch_semaphore_create(0);
        //信号量嵌套时,这里的参数要不同,如dispatch_semaphore_create(1)
        [self POSTwithURL:@"http://www.sina.com" completionHandler:^{
            dispatch_semaphore_signal(semaphore1);
        }];
        dispatch_semaphore_wait(semaphore1,DISPATCH_TIME_FOREVER);
        
        
        dispatch_semaphore_signal(semaphore);
    }];
    dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);

 

3、成员属性要写对

@property (nonatomic, readonly, copy) NSString *name;

发生过误把copy 写成assign,导致读name时的野指针;

野指针是try-catch不到的!!!

 

4、注意编译选项

声明NSArray *names;默认配置会把它初始成nil;但总有人会改这个配置的;

 

5、给别人写闭源框架时,做参数检查,能多详细就多详细

想让接入方传入一个成员为NSNumber的数组a,判断传空的条件有a==nil, a. count == 0, a[0] ==0等等校验。

 

6  componentsSeparatedByString有坑

    NSString *s = @"";
    
    NSArray *a = [s componentsSeparatedByString:@"|"];
    
    //a的结果是@[@""],并不是nil,也不是@[]

7  给iOS10开发notification service extension,用来推带图片的推送,调试service Target时总是“unable to attach”。困扰许久,发现根工具的architecture被改成了仅armv7,而主target还是atmv7、arm64。结果生成的notification service extension的architecture也是仅armv7

 

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
https://www.yalewoo.com/ios_kai_fa_xie_bug_ri_chang.html

上一篇:

下一篇:

我要评论

验证码*: 4 + 8 =