熱重載:不用重新運(yùn)行工程,只需要保存一下,即可實(shí)現(xiàn)實(shí)時(shí)預(yù)覽的效果,大大提高編程的效率。
最近可以熱重載的技術(shù)棧包括:
- 2019WWDC推出的SwiftUI
局限性在于,只支持iOS13.0及以上,照目前絕大多數(shù)最低支持iOS8.0及以上來(lái)看,這估計(jì)要等Apple出到iOS18甚至更高的系統(tǒng)版本時(shí)才會(huì)普及,那不黃瓜菜~,目前iOS 13支持的機(jī)型如下:iPhone 更高、iPhone 11 Pro Max、iPhone 11 Pro、iPhone 11、iPhone XS、iPhone XS Max、iPhone XR、iPhone X、iPhone 8、iPhone 8 Plus、iPhone 7、iPhone 7 Plus、iPhone 6s、iPhone 6s Plus、iPhone SE、iPod touch(第 7 代);iOS 13對(duì)設(shè)備的要求進(jìn)一步提高,手機(jī)需要iPhone SE以上,這意味著,iPhone 5s、iPhone 6/6 Plus等機(jī)型將無(wú)緣 iOS 13系統(tǒng);期待既然不是硬件的問(wèn)題兼容到iOS8或者iOS9未嘗不可,畢竟那么多蘋(píng)果用戶還是喜歡老而穩(wěn)定的系統(tǒng)的。 - Flutter Live 2018 上,Google 宣布 Flutter 1.0 正式發(fā)布
現(xiàn)有的iOS項(xiàng)目實(shí)現(xiàn)熱重載:
局限性:只能在debug狀態(tài)模擬器上可用。
1.mac電腦AppStore下載InjectionIII,之后打開(kāi);
2.打開(kāi)項(xiàng)目在AppDelegate.m中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
#endif
}
3.在待調(diào)試的頁(yè)面exampleViewController.m中寫(xiě)下這個(gè)方法:
- (void)injected這個(gè)方法內(nèi)的代碼一保存就會(huì)熱重載。
- (void)injected{
[self configUI];
}
- (void)configUI{
//do somthing ...
在這里修改UI樣式
}
4.運(yùn)行工程
會(huì)彈出一個(gè)彈窗提示你選擇project的文件夾,然后你就選擇你工程的文件夾目錄即可:

選擇工程文件夾
然后成功的話就出現(xiàn)這兩行:
?? Injection connected ??
?? Watching /Users/xxx/demo/**
5.寫(xiě)代碼:
- (void)injected{
[self configUI];
}
- (void)configUI{
//do somthing ...
self.titleLabel.text = @"test";
}
cmd+s立即出效果:

test
- (void)injected{
[self configUI];
}
- (void)configUI{
//do somthing ...
self.titleLabel.text = @"寫(xiě)代碼";
}
cmd+s立即出效果:

寫(xiě)代碼
?? *** Compiling /Users/xxx/demo/xxx/Project/xxx/xxx.m ***
?? Loading .dylib ...
objc[60350]: Class exampleViewController is implemented in both /Users/xxx/Library/Developer/CoreSimulator/Devices/FAE2FCF2-989D-49D0-8F14-AB5C8A2BA5D1/data/Containers/Bundle/Application/D1715016-A956-4B60-98E1-7BE3FDAFF6DE/LifeVC.app/LifeVC (0x105549980) and /Users/xxx/Library/Containers/com.johnholdsworth.InjectionIII/Data/eval102.dylib (0x13c0182d8). One of the two will be used. Which one is undefined.
?? Loaded .dylib - Ignore any duplicate class warning ^
這樣就不用做一個(gè)小改動(dòng)就cmd+R重新編譯運(yùn)行代碼了,大大節(jié)省不必要的時(shí)間浪費(fèi),攢下的時(shí)間給到邏輯書(shū)寫(xiě)和保證代碼質(zhì)量方面豈不美哉。共勉之吧~????