Я делаю библиотеку исправлений на основе jscore,
сегодня я обнаружил странную проблему,
весь проект для тестирования есть: https://github.com/galenzhao/jshotfix/releases/download/test0.1/test.zip
код ключа как этот:
NSString *fixScriptString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"5.0.5" ofType:@"js"] encoding:NSUTF8StringEncoding error:nil];
NSLog(@"js patch:\n%@", fixScriptString);
[Felix evalString:fixScriptString];
TTTTViewController *vc = [[TTTTViewController alloc] init];
NSString *b=nil;//=[vc formatCityStr:@"PEK"];
[vc hook:@"123"];
NSString*c=[vc hookstr:@"098"];
//[vc formatDateStr:@"05/29/2015"];
NSString *a=[vc formatDateStr:@"04/29/2015"];
NSLog(@"\n%@,%@\n%@,%@, %@",a,b,a.class,b.class, c);
первый функционал (hookstr :) работает хорошо,
но сбой при formatDateStr:
//04/29/2015 -> 20150429
- (NSString *)formatDateStr:(NSString*)orgDateStr {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"MM/dd/yyyy"];
NSDate *orgDate = [dateFormatter dateFromString:orgDateStr];
if (orgDate == nil) {
[dateFormatter setDateFormat: @"MM/dd/yyyy HH:mm:ss"];
orgDate = [dateFormatter dateFromString:orgDateStr];
}
[dateFormatter setDateFormat: @"yyyy-MM-dd"];
NSString *b=[dateFormatter stringFromDate:orgDate];
NSLog(@"%@",b);
return b;
}
- (void)hook:(NSString*)abc{
NSLog(@"not hook:%@", abc);
}
- (NSString*)hookstr:(NSString*)abc{
NSLog(@"not hookstr:%@", abc);
return [NSString stringWithFormat:@"%@%@",@"222", abc];
}
по включённому zombie obj,
там написано, что строка была дважды освобождена,
2018-09-15 14:33:06.278717+0800 test[79311:985641] *** -[CFString retain]: message sent to deallocated instance 0x600000234d60
Я очень смущен.
кто-нибудь может мне помочь?
спасибо.