目录
1、ATS配置
2、状态栏全局变亮白
3、懒加载
4、内存泄漏
5、常用的第三方库
6、反射机制
7、运行时
8、MD5加密
9、聊天界面
10、多线程GCD
11、 启动图尺寸大小
1、ATS配置
App 网络http请求已被禁止,需要在Info.plist文件配置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2、状态栏全局变亮白
UIApplication.shared.statusBarStyle = .lightContent
还需要在Info.plist文件配置:
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
3、懒加载
lazy var mainScrollView:UIScrollView = {()-> UIScrollView in
let scrollView = UIScrollView()
return scrollView
}()
4、内存泄漏
解决闭包循环引用[weak self]
//ESPullToRefresh上拉加载
var footer: ESRefreshProtocol & ESRefreshAnimatorProtocol
footer = ESRefreshFooterAnimator.init(frame: CGRect.zero)
homeTableView.es.addInfiniteScrolling(animator: footer) { [weak self] in
self?.pageArray[tag]+=1
self?.initData(tag:tag+1,page:(self?.pageArray[tag]) ?? 1)
}
Timer释放内存
var timer:Timer?
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 10.0, *) {
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in
print("定时器执行")
})
} else {
timer=Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(write), userInfo: nil, repeats: true)
}
timer?.fire() //启动定时器
//timer?.fireDate=Date.distantFuture //暂停定时器
}
@objc func write(){
print("定时器执行")
}
deinit{
timer?.invalidate()
timer=nil
print("销毁定时器")
}
CADisplayLink释放内存
let displayLink = CADisplayLink.init(target: self, selector: #selector(write))
displayLink?.frameInterval = 1
displayLink?.add(to: .current, forMode: .commonModes)
//displayLink?.isPaused=false//暂停或开始定时器
//销毁定时器必须先执行(deinit在这之后执行)
displayLink?.invalidate()
//然后再执行
displayLink=nil
</