1,统计项目代码的行数!
打开终端,先通过命令行 cd 到xcode 工程目录下,然后使用下面的命令行查询:
find . -name "*.m" -or -name "*.h" -or -name "*.c" |xargs grep -v "^$"|wc -l
2,iOS中arc的设置与使用-fobjc-arc或者-fno-objc-arc
直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc,就可以让旧项目支持arc。如果想让原来支持arc的不使用arc则添加-fno-objc-arc
3,Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
4,iOS 编程之配置.pch文件
pch全称为“precompiled header”,也就是预编译头文件,有利于节约开发时间、代码维护时间。
5,使用GTMBase64编码解码字符串
说明:BASE64不是用来加密的。你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。你再仔细研究下EMAIL就会发现其实EMAIL就是用base64编码过后再发送的。然后接收的时候再还原。
还有一种情况下用BASE64编码也很好,比如一个图片文件,或者其他任何二进制文件。我可以把它编码成字符串。这样用XML或者数据库就能直接以文本的方式来存储这些文件了。
6,Xcode 7新的特性:__kindof
这是一个相当方便的特性。没有__kindof之前
UIButton *button = view.subviews.lastObject;
是会有警告的,需要强制转换才能消除警告
UIButton*button = (UIButton*)view.subviews.lastObject;
但有了__kindof之后就不需要强制转换了。
@property(nonatomic,readonly,copy)NSArray<__kindofUIView*> *subviews;
__kindof如其字面意思,这个修饰符的意思是,声明的类是该类或者是该子类。
7,到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf
Objective C 的Block是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发、异步任务。但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block。因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’self’ 是一个 strong 类型的变量,引用计数会加 1,于是,self retains queue, queue retains block,block retains self。
解决 retain circle
Apple 官方的建议是,传进 Block 之前,把 ‘self’ 转换成 weak automatic 的变量,这样在 Block 中就不会出现对 self 的强引用。如果在 Block 执行完成之前,self 被释放了,weakSelf 也会变为 nil。
示例代码:
clang 的文档表示,在 doSomething 内,weakSelf 不会被释放。但,下面的情况除外:
在 doSomething 中,weakSelf 不会变成 nil,不过在 doSomething 执行完成,调用第二个方法 doOtherThing 的时候,weakSelf 有可能被释放,于是,strongSelf 就派上用场了:
__strong确保在 Block 内,strongSelf 不会被释放。
总结
在 Block 内如果需要访问 self 的方法、变量,建议使用 weakSelf。
如果在 Block 内需要多次 访问 self,则需要使用 strongSelf。
iOS/Mac 开发博客列表(不断更新中)
作为一个iOS开发要看的网站,一定对你有用的,相信我!
提高iOS开发效率的方法和工具
不断更新中,欢迎提供小技巧!