前言:前陣子項(xiàng)目剛上線很閑蜀铲,自己學(xué)新東西边琉,突然發(fā)現(xiàn)一個(gè)很牛的東東——JSPatch, 線上直接改BUG的利器凹侨啊(直接用來(lái)寫模塊個(gè)人現(xiàn)在還沒(méi)那技術(shù)变姨,而且React native會(huì)更好,雖然我不會(huì)厌丑。)定欧,雖然一點(diǎn)都不懂JS,但是不需要審核蹄衷,直接線上改bug的誘惑太大了忧额,果斷花兩天時(shí)間學(xué)了下JS大體懂了,然后開始研究JSPatch愧口。
工具
首先先把幾個(gè)很好用的工具和文章貼在下面睦番,工欲善其事必先利其器,有了這幾個(gè)工具和前人經(jīng)驗(yàn)文章,保證你少走大量彎路.(強(qiáng)烈推薦使用文章里讓打開的js斷點(diǎn)調(diào)試托嚣,非常有用9臁!J酒簟)
1兢哭、JSPatch專用 OC 轉(zhuǎn)化 JS工具(雖然很多并不準(zhǔn)確,不過(guò)初學(xué)者用它比一下一下打方便多了夫嗓,可以類似用翻譯軟件翻譯英文一樣迟螺,先翻譯再改不對(duì)的地方):JSPatchConvertor
2、JSPatchX —— JSPatch專用Xcode自動(dòng)補(bǔ)全插件:JSPatchX
3舍咖、JSPatch 基礎(chǔ)用法 : JSPatch 基礎(chǔ)用法
4矩父、JSPatch 常見問(wèn)題 : JSPatch 常見問(wèn)題
5、簡(jiǎn)書上的兩篇前輩總結(jié)經(jīng)驗(yàn):使用JSPatch問(wèn)題若干及解決方法 iOS開發(fā) — JSPatch
各種坑
(雖然都是因?yàn)闆](méi)有認(rèn)真仔細(xì)看JSPatch基礎(chǔ)用法導(dǎo)致的排霉。窍株,原諒我比較心急,直接就像上手開始用)
1.私有成員變量不能直接訪問(wèn)攻柠,必須用valueForKey 或者 setValue_forKey調(diào)用球订。比如:
self.valueForKey("_moreModelArray").count(); self.setValue_forKey(NSMutableArray.array(), "_vcArray");
2.JS數(shù)組、字典瑰钮、字符串等等和OC的都不一樣
詳見工具里面的文章冒滩,不具體說(shuō)了,都是淚
3.JS不能識(shí)別枚舉飞涂,比如:
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:0];
UIPageViewControllerTransitionStylePageCurl和UIPageViewControllerNavigationOrientationHorizontal全部都不能識(shí)別啊有木有5┎俊!较店!所以我默默的都直接改成了對(duì)應(yīng)的枚舉值
var pageViewController = UIPageViewController.alloc().initWithTransitionStyle_navigationOrientation_options(0, 0, 0);
4.必須在require里面聲明了相關(guān)類士八,才能使用相應(yīng)方法,一般寫在main.js的最上面梁呈,比如:
require('NSMutableArray,NSString,UIPageViewController, NSKeyedUnarchiver, FSProductFirstViewController, FSProductMoreDetailViewController, UIScreen');
- CGRect也是一個(gè)坑婚度,最多的是在設(shè)置frame的時(shí)候,比如:
view.frame.origin.x
在js應(yīng)該寫成:view.frame().x (特別注意不是view.frame().origin().x)
CGRectMake(20, 20, 100, 100)
應(yīng)該寫成:{x:20, y:20, width:100, height:100}