iOS零碎知识小分享(一)[包含最近证书失效上传失败的解决方法]

1.最近有很多人的证书没法打包,没法上传的解决方法

我的一个同事污力波波告诉我,造成这些的原因是苹果的根证书在2016年2月14号到期了,所以下载装一下就好了,装完记得重启。
https://developer.apple.com/certificationauthority/AppleWWDRCA.cer
这里有详细的解决教程:

https://segmentfault.com/q/101000000443396

2.关于NSOperation,异步的技巧

当你写一个operation继承NSOperation的时候,我们要实现以下方法来进行我们的多线程操作:

- (void)start;
- (void)main;

然而默认的是main执行完了,就自动视为operation结束,这样就导致一些异步的操作,或者回调的处理出现问题,所以我们可以重写下面的状态:

@property (readonly, getter=isExecuting) BOOL executing;
@property (readonly, getter=isFinished) BOOL finished;

要点是截取系统的KVO,不让系统的逻辑控制finish的flag,具体如下:

- (void)main {
    
    @synchronized (self) {
        if (self.isCancelled) {
            self.finished = YES;
            [self done];
            return;
        }
    }
    
   //do something
}

- (void)done{
    self.executing = NO;
    self.finished = YES;
}

- (void)setFinished:(BOOL)finished {
    [self willChangeValueForKey:@"isFinished"];
    _finished = finished;
    [self didChangeValueForKey:@"isFinished"];
}

- (void)setExecuting:(BOOL)executing {
    [self willChangeValueForKey:@"isExecuting"];
    _executing = executing;
    [self didChangeValueForKey:@"isExecuting"];
}

3.一些关于废弃方法处理的小技巧

如果一个方法/参数暂时不用,或者正在改动中,防止别的地方调用,我们可以加上__unavailable来废弃。

-(void)__unavailable methodName;

那如果有的地方仍然有用到该方法/参数,则可做出如下提示:

@property (assign, nonatomic) NSInteger number DEPRECATED_MSG_ATTRIBUTE("this property is deprecated");

4.泛型在OC中的应用

泛型是OC在2015年引入的新特性,写法如下:

NSMutableArray <NSString *> *strings = [NSMutableArray new];

这样的好处是,加入数组的时候不需要进行类型转换,且也保证了安全性。

还有枚举的时候,会自动生成类型,方便至极:

[strings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
     //something
}];

5.关于属性非空的判断

我们通常用nonnull来限定属性的非空状态:

@property (strong, nonatomic, nonnull) NSString *str;

然而很多个属性的情况下,每次都写比较坑爹,所以可以用苹果给我们准备好的宏:

NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) NSString *str1;
@property (strong, nonatomic) NSString *str2;
@property (strong, nonatomic, nullable) NSString *str3;
NS_ASSUME_NONNULL_END

其中nullable设置该参数可以赋值为空

简书已经弃用,欢迎移步我的小专栏:
https://xiaozhuanlan.com/dahuihuiiOS

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

推荐阅读更多精彩内容

  • 原文链接:http://www.cocoachina.com/ios/20150807/12911.html 现如...
    Kevin追梦先生阅读 1,488评论 0 3
  • 1.介绍下内存的几大区域? 2.你是如何组件化解耦的? 3.runtime如何通过selector找到对应的IMP...
    小孩仔阅读 1,704评论 0 21
  • iOS Concurrency Programming Guide iOS 和 Mac OS 传统的并发编程模型是...
    YangPu阅读 857评论 0 2
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,777评论 0 17
  • 一个人的豁达,体现在落魄的时候。 一个人的涵养,体现在愤怒的时候。 一个人的体贴,体现在悲伤的时候。 一个人的成熟...
    Sipure阅读 256评论 0 2