ios tips

  1. 代码块:
    精简代码, 返回最后一句的值,这个方法有一个优点,所有的变量都在代码块中,也就是只在代码块的区域中有效,这意味着可以减少对其他作用域的命名污染。
NSURL *url = ({ NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseURLString, endpoint]; 
[NSURL URLWithString:urlString];
});
  1. 关于编译器:
  • 关闭警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[myObj performSelector:mySelector withObject:name];
#pragma clang diagnostic pop
  • 忽略没用的变量
    #pragma unused (foo)
  • 明确定义错误和警告
#error Whoa, buddy, you need to check for zero here!
#warning Dude, don't compare floating point numbers like this!
  1. block
    下面的方法可以避免循环引用,但是执行多行时,可能变成Nil;
__weak typeof(self) weakSelf = self;
dispatch_block_t block = ^{ [weakSelf doSomething]; // weakSelf != nil 
// preemption, weakSelf turned nil
 [weakSelf doSomethingElse]; // weakSelf == nil
};

最好这样调用:

__weak typeof(self) weakSelf = self;
myObj.myBlock = ^{ 
__strong typeof(self) strongSelf = weakSelf; 
if (strongSelf) { [strongSelf doSomething]; // strongSelf != nil 
// preemption, strongSelf still not nil(抢占的时候,strongSelf 还是非 nil 的)
 [strongSelf doSomethingElse]; // strongSelf != nil } 
else { // Probably nothing... return; 
}
};

ref:https://github.com/oa414/objc-zen-book-cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容