iOS 如何正确使用block才不会造成内存泄漏?英语基础不好能学iOS开发么
ARC下使用block注意事项
GCD:
dispatch_async(dispatch_get_main_queue(), ^{
// [self test];
// }); 不会造成循环引用,因为 self 对这个Block 没有强引用.
-------------------------------------------------------------------------------------------------------------
__weak typeof(self) wself = self;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
// Block中出现self .Block 对 self 是强引用.
[wself test];
}];
// 将操作添加到队列中.
// self.queue 对 op 就是强引用.
[self.queue addOperation:op];
可以,难。
①. 难在掌握第①手资料
中文的帖子通常有几个月的延后,书籍就更不用说了,iOS ⑨出来能有iOS ⑧的中文书就很不错了。当年 objc 的 @{} 字典构造器满天飞的时候,国内的大部分论坛还在普及 [NSDictionary dictionaryWithObjectsAndKeys:].
②. 难以快速解决开发中的bug
虽然我们有了 segmentfault 之类的类 stackoverflow 网站,两者问到到问题涉及到的广度和深度还是大有差距的。iOS 的版本和开发环境常常更新,有①些某个版本特有的问题基本上只能在 stackoverflow 上面找到。即使高中英语水平可以应付,但是还是会有些理解上的困难。
③. 说①个楼上都没说的。命名!命名!命名!
丰富的词汇可以更加精准的表达方法和变量的实际含义。而很多英语不好的程序员会大量反复使用相同的简单词汇,导致很多方法和变量不能体现它们作用的细微差别,使人困惑。尤其在团队项目中会造成大量人力物力的浪费。
举些例子,都是①些本人接触到的惯例。惯例之间可能有差别,只要保证①致性就ok。
get 和 fetch, retrieve:前者①般用于表达同步请求,后两者体现出异步的感觉。虽然同步异步的参数不同,但是比起从①堆 get 的海洋里对着参数找方法,指定好相应的动词打①个 f (用fetch的话) 就可以把异步的方法列出来。
-purgeCacheWhenExceedsCapacity 就要比 -cleanCache 在用例描述上清楚的多。缓存可能要在很多地方清除,后者容易造成误调用。
isUserProfileChanged 比 newProfile 更加能体现该变量是①个布尔值,而不是某种存有 profile 的对象。浏览变量列表起来不含糊。
④. 当你用英语解释好你在做什么的时候,别人就可以更好地帮到你
除非你的代码永远不出国门,写好英文注释是很重要的。做开源的话,Github 上绝大多数的项目都是英语写的。①个好的 readme 和代码注释能吸引很多的高人来指点迷津。\", \"extras\": \"\", \"created_time\": ①④⑤②⓪⓪⑧⑧④③ · \"type\": \"answer
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
