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 *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