溟落小气少年的部落格?

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
今年的雨似乎要晚些来就像有些泪晚一些才来
无忧是不是快乐
活着的人熟悉了死亡
记住是痛苦忘记是危险
信则有不信则无
是给个机会而非退让
自信犯的错一定比畏缩多聪明犯的错一定比无知多
那失败是不是该拿来庆祝起码也该拿来纪念
梦见在这里上课梦见在这里做梦
最容得到的机会往往不是机会
看不清未来时不妨看看过去
& 北溟有鱼.其名为鲲.化而为鸟.其名为鹏 &
最后登录加载中...
this.p={b:2,ua:-1, ub:'http://img.bimg.126.net/photo/bcM82KfsZibdcHmShMKF8Q==/373741.jpg',us:'他', friendstatus:'none',followstatus:'unFollow',hmcon:'0',aShowT:'0',guideId:6};
积分 ${data.totalScore} 分,距离下一等级还有 ${data.nextGradeNeedScore}分
评论列表加载中...
this.p={b:2,bn:5,bt:5,pn:5,pt:5};
& & & & & &
网易公司版权所有&&
{list x.l as y}
{/list} {/list}
{if defined('wl')} {list wl as x}{/list} {/if}(5)(11)(14)
& &&最近上线了一个通过JSPatch编写的活动,既然是活动,就不是修改线上app的bug那么简单了。活动名字我不能说。我就总结一些重要的点和难点和注意的地方,我在这里说一下:
开题说明:
既然公司采用了这项技术,就做过了调研,那最重要的是开发者深刻理解JSPatch的原理(替换/新增方法,替换/新增类),如果没理解自己看JSPatch的实现原理。
必须注意的地方:
①把bang写的JSPatch代码
touchesBegan_withEvent(touches,event){
& & & & & if(!isOpen){
& & & & & var anyTouch =
touches.anyObject()
& & & & & var p =
anyTouch.locationInView(mengbanImg)
上面有需求,下面就要有解决方案。
无论多么变态的需求,都要给出解决方案。
闲话不多说,先说解决方案
&-------------------------------------------------------------------------------------------------
bang这个人不得不说考虑得很周全,又扯淡了,不过这不是闲话。
在gihub上download了bang的JSPatch之后,导入你的工程Extensions、JSPatch、Loader,然后加上libz.tbd和JavaScriptCore.framework。
上面这个做完后,
下面说正事啊,是不是上面的跑题了,额,直接代码了啊。
'JPCleaner.h'
博主直接贴代码,说方法了,墨迹是孙子:
UIScreen.mainScreen().bounds().width
UIScreen.mainScreen().bounds().height
然后在自定义控件的时候,这么用:
var familyCount=0
自己定义了一个整型的变量familyCount,然后我进行了
familyCount++
然后想Log打印这个变量,然后就报了一堆NSNumber乱七八糟的错。
几经查找,bang590大神忽略了,还是觉得这是个小问题,都没有写这个整型转字符串的方法,醉醉的
然后博主抱着侥幸的心理+大胆的猜想
var familyCountStr=familyCount.toString()
console.log(familyCountStr)
竟然转过来了,太神奇了!JSPatch,就是这么神奇!
博主在JSPatch的道路上越走越远。
& & & & &&//定时器
& & & & &&var timer =
NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats(1.0,
& & OC & & & & & &
& & & & & & & & &
& & & & & & & & &
& & & & & & & &
NSMakeRange(16,1); &
& & & & & & & & &
& & & & & & & & &
& & & & & & & & &
& & & & & & & & &
& & & & & & & & &
当你使用JSPatch定义OC里面的UIView,UIButton,UIImageView,UILabel
,你会发现,说好的JavaScript替换OC方法的,代码编写的时候竟然不是JavaScript语言,说好的JSPatch
Convertor 可以把OC转JS的,那我直接----复制----粘贴----Convertor----复制----粘贴----Run
&就完事了。握了个大草!
JSPatch就是这么的奇妙!恭喜你要开始学习一门新的开发语言----JSPatch(就先这么叫吧,博主自定义的)
下面博主开始装逼大神普及绝学(博主直接代码教学)了--------为iOS攻城狮立命,为博主继绝学,为万只iOS攻城狮开太平!
var&width =
require('UIScreen').mainScreen().bounds().width
var&height =
require('UIScreen').mainScreen().bounds().height
var& myView =
require('UIView').alloc().initWithFrame({x:5,y:he
作为一名iOS的成熟的开发工程师,用到的技术或者协议,使用之前一定要了解他的优缺点,不能只是说我会做。
先记住下面的话吧,知道JSPatch是什么:
JSPatch就是用JavaScript调用oc的原生接口,从而动态植入代码来替换旧代码,以实现动态代码。
那到底jspatch怎么替换了之前的代码呢?(这可是重点)
JSPatch 可以用 defineClass 接口任意替换一个类的方法,方法替换的实现过程也是颇为曲折,一开始是用
va_list 的方式获取参数,结果发现 arm64
下不可用,只能转而用另一种hack方式绕道实现。另外在给类新增方法、实现property、支持self/super关键字上也费了些功夫,下面逐个说明。
OC上,每个类都是这样一个结构体:
struct&objc_class&{
&&struct&objc_class&*&
&&const&char&*&
有个朋友在群里求助转时间格式
17:46:18.84 +0800 CST,我之前转过XMLDate,我就想帮他转一下,查了半天只找到一个C语言的转换方法,又复杂又繁琐。我就尝试着用我之前的方法解决一下。弄了半天,原来是24小时的问题,也是醉了。下面上源代码:
NSString *yourDate=@' 17:46:18.84 +0800
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc]
init];&&& [inputFormatter setDateFormat:@'yyyy-MM-dd
HH:mm:ss.SS Z z'];&&& inputFormatter.locale =
[[NSLocale alloc]
initWithLocaleIdentifier:@'en_US'];&&& NSDate
*inputDate = [inputFormatter
dateFromString:yourDate];&&& NSDateFormatter
*outputFormatter = [[NSDateFormatter alloc]
init];&&& [outputFormatter
setDateFormat:@'yyyy-MM-dd HH:mm:ss
NSString *outputDate = [outputFormatter
stringFromDate:inputDate];&

参考资料

 

随机推荐