bang590 / JSPatch

JSPatch bridge Objective-C and Javascript using the Objective-C runtime. You can call any Objective-C class and method in JavaScript by just including a small engine. JSPatch is generally used to hotfix iOS App.
MIT License
11.36k stars 2.24k forks source link

NSData数据长度判断错误 #261

Open fighting300 opened 8 years ago

fighting300 commented 8 years ago

case1. var fileData = NSData.alloc().initWithContentsOfFile(packagePath); case2. var fileData = NSData.dataWithContentsOfFile(packagePath) if (fileData.length() == 0) { } 在类方法中试用case1.会报"Reason":"*\ -length only defined for abstract class. Define -[_NSPlaceholderData length]!"的错误 目前出现问题的手机是iphone6s 找到相关的oc问题解答http://stackoverflow.com/questions/6012080/nsstring-initialization

ghost commented 8 years ago

在脚本中,若新建对象的所属类有类方法时,在不影响性能的情况下,优先使用类方法。JS脚本翻译为OC执行逻辑时,是分开调用每一个方法的。即[[Class alloc] initMethod]是分开调用的。 执行逻辑类似于

aObject = [Object alloc];
[aObject initMethod];

此种方式的弊端在于,对于一部分alloc后的对象不等于init后的对象的类,如类簇(如NSString, NSArray等),日历NSCalendar等,会出现问题。 相似问题参考:https://github.com/bang590/JSPatch/issues/248

文档参考:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/index.html#//apple_ref/occ/instm/NSObject/init