IOS使用 swizzle 解决一些错误
来源:互联网 发布:天刀脸型数据男 网盘 编辑:程序博客网 时间:2024/06/01 08:11
不知道你有没有经常遇到 这种 参数为 nil 的错误 或者是 数组错误。
而且现在在 多线程中 还是 大量使用 block 的情况下 要查找起来 实在是 太费劲了
所以 我用了个 取巧的办法(可能会导致你的逻辑错误) 用swizzle 来替换这些没验证的方法
我是按我自己 umeng 的 错误统计来写的 给出个 例子而已
然后在替换的方法里面 加入参数验证
示例地址:
http://download.csdn.net/detail/li6185377/6400383
而且现在在 多线程中 还是 大量使用 block 的情况下 要查找起来 实在是 太费劲了
所以 我用了个 取巧的办法(可能会导致你的逻辑错误) 用swizzle 来替换这些没验证的方法
我是按我自己 umeng 的 错误统计来写的 给出个 例子而已
+(void)callSafeCategory{ NSError* error = nil; [objc_getClass("__NSPlaceholderArray") jr_swizzleMethod:@selector(initWithObjects:count:) withMethod:@selector(SY_safeInitWithObjects:count:) error:&error]; LOG_Error [objc_getClass("__NSArrayI") jr_swizzleMethod:@selector(objectAtIndex:) withMethod:@selector(SY_safeObjectAtIndex:) error:&error]; LOG_Error [objc_getClass("__NSArrayM") jr_swizzleMethod:@selector(objectAtIndex:) withMethod:@selector(SY_safeObjectAtIndex:) error:&error]; LOG_Error [objc_getClass("__NSArrayM") jr_swizzleMethod:@selector(addObject:) withMethod:@selector(SY_safeAddObject:) error:&error]; LOG_Error [objc_getClass("__NSDictionaryI") jr_swizzleMethod:@selector(objectForKey:) withMethod:@selector(SY_safeObjectForKey:) error:&error]; LOG_Error [objc_getClass("__NSDictionaryM") jr_swizzleMethod:@selector(objectForKey:) withMethod:@selector(SY_safeObjectForKey:) error:&error]; LOG_Error [objc_getClass("__NSDictionaryM") jr_swizzleMethod:@selector(setObject:forKey:) withMethod:@selector(SY_safeSetObject:forKey:) error:&error]; LOG_Error [NSURL jr_swizzleClassMethod:@selector(fileURLWithPath:isDirectory:) withClassMethod:@selector(SY_safeFileURLWithPath:isDirectory:) error:&error]; LOG_Error [NSFileManager jr_swizzleMethod:@selector(enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:) withMethod:@selector(SY_safeEnumeratorAtURL:includingPropertiesForKeys:options:errorHandler:) error:&error]; LOG_Error}
然后在替换的方法里面 加入参数验证
<pre name="code" class="objc">@implementation NSArray(SYSafeCategory)-(id)SY_safeObjectAtIndex:(int)index{ if(index>=0 && index < self.count) { return [self SY_safeObjectAtIndex:index]; } else{#ifdef DEBUG NSAssert(NO,nil);#endif } return nil;}-(id)SY_safeInitWithObjects:(const id [])objects count:(NSUInteger)cnt{ for (int i=0; i<cnt; i++) { if(objects[i] == nil) return nil; } return [self SY_safeInitWithObjects:objects count:cnt];}@end@implementation NSMutableArray(SYSafeCategory)-(void)SY_safeAddObject:(id)anObject{ if(anObject != nil){ [self SY_safeAddObject:anObject]; }}@end
示例地址:
http://download.csdn.net/detail/li6185377/6400383
0 0
- IOS使用 swizzle 解决一些错误
- IOS使用 swizzle 解决一些错误
- ios swizzle
- ios runtime swizzle
- iOS--runtime / Swizzle
- IOS 页面统计 SWIZZLE 的简单应用
- iOS笔记 runtime Method Swizzle 方法交换//
- iOS使用一些特殊键盘时的运行错误解决Can't find keyplane that supports type 4 for keyboard
- UBUNTU 一些错误解决
- 使用cin时遇到的一些错误与解决
- Cadence使用中的一些错误提示的解决
- ios afnetworking 错误解决
- ios打包错误解决
- iOS错误解决
- IOS打包错误解决
- Method Swizzle黑魔法,修改 ios 系统类库方法
- iOS开发-黑魔法 method swizzle(一)
- 移植的一些错误解决
- 微信常见问题
- 一步步构建大型网站架构(转)
- Release 下调试代码设置 (VS2005/2008)
- Java 代码生成
- Android的Touch事件分发机制简单分析
- IOS使用 swizzle 解决一些错误
- 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其个位数字的立方和确好等于该数本身,如:153=1+5+3,则153是一个“水仙花数”。
- WebKit网页布局实现之主要架构篇
- 数据结构之二叉树相关问题汇总
- 安卓中四大组件之——Activity
- Xcode_PCH文件注意事项
- "Host 'admin-PC' is not allowed to connect to this MySQLserver"
- python跨行 print:多用(),换行符\要小心,少用+或者不用(其它程序代码跨行用\就行,不能用括号)
- MQTT–多个Zigbee监测网络远程监控的实现