SDWebImage 图片加载框架
Reachability 检测手机网络状态
MJRefresh 下拉刷新,上拉加载更多组件
Toast Toast
MBProgressHUD 半透明提示框
DateTools 用于提高Objective-C中日期和时间相关操作的效率 DateTools使用「日期工具库」
更多:
iOS 第三方库、插件、知名博客总结
UIScrollview与Autolayout
scrollView比较特殊,因为它有个contentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。
为了正常显示,使用一个单一的containerView占满全部,然后把所有的subview添加到containerView中。(亲测)
Where should I be setting autolayout constraints when creating views programmatically?
How to Use updateConstraints?
updateViewConstraints与updateConstraints可以在需要更新大量约束时重写,对于只初始化一次而不需要修改的约束,写到类似于viewDidLoad的方法中比较好。
The Mystery of the +requiresConstraintBasedLayout
基于约束的布局是懒触发的,只有在添加了约束的情况下,系统才会自动调用 -updateConstraints 方法,如果把所有的约束放在 updateConstraints中ios11描述文件,那么系统将会不知道你的布局方式是基于约束的,所以重写+requiresConstraintBasedLayout 返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法 从而正确添加约束。
透彻理解block中weakSelf和strongSelf
__weak __typeof(self)weakSelf = self;
[self.context performBlock:^{
__strong __typeof(weakSelf)strongSelf = weakSelf;
[strongSelf doSomething];
}];
当block直接或间接的被self持有时,需要weakSelf。其他情况下加weakSelf也没什么问题。
使用libextobjc库可以简化下代码:
#import "EXTScope.h"
@weakify(self)
[self.context performBlock:^{
@strongify(self)
[self doSomething];
}];
iOS本地数据存取,看这里就够了
XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3Core Data
// TODO: 2017/10/23 继续完善本文直到结束入门
When they are needed, comments should be used to explain why a particular piece of code does something. Any comments that are used must be kept up-to-date or deleted.
——The official raywenderlich.com Objective-C style guide.
JAVA设计模式之单例模式
使用dispatch_once创建单例
ViewController的几个属性:edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars
如何做好IOS View的布局
布局原则:
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》阅读笔记