ios常用工具总结1

收集一些编程中自己用的工具,随着经验的增加会越来越多。

宏在编程中还是非常有用的,而且效率高,只是没有类型检查而已。

//行数
#define PRINT_LINE printf("file:%s line:%d\n",__FILE__,__LINE__);

//打印对象类型
#define PRINT_OBJTYPE(obj) NSLog(@"the %s type is %@\n",#obj,[obj class]);

//断言,并有文件名,行数提示
#define MYASSERT(value) if(!(value)){ \
printf("myAssert Failed: (%s)  in  ",#value);\
PRINT_LINE\
};
//json解析中经常遇到dictionary和array的混淆调用不存在的函数出错又不提示错误的地址,有时断言一下会非常有用。
#define MYASSERT_ARRAY(obj) if(![obj isKindOfClass:[NSArray class]]){ \
NSLog(@"obj:%@ is not NSArray but is %@  at file:%s line:%d",obj,[obj class],__FILE__,__LINE__); \
};
#define MYASSERT_DICT(obj) if(![obj isKindOfClass:[NSDictionary class]]){ \
NSLog(@"obj:%@ is not NSDictionary  but is %@ at file:%s line:%d",obj,[obj class],__FILE__,__LINE__); \
};



#define DEG2RAD 0.017453f  //角度转弧度的乘法因子
#define RAD2DEG 57.295779f //弧度转角度

#define SAFE_RELEASE(obj) [obj release];obj = nil; //释放一个对象时最好把它清零,所谓安全释放

在索引NSArray常常数组越界闪退,如果能不闪退并且能输出那一行出错那将非常有用,这里结合宏和Catagory的功能:

#define OBJECT_AT(index) MyObjectAtIndex:(index) File:__FILE__ Line:__LINE__  //还可以想办法加个对象的类型判断更安全
@implementation NSArray (ExtentionArray)
-(id)MyObjectAtIndex:(int)index File:(char*)file Line:(int)line{
    id obj = nil;
    if (index >= 0 && index < [self count]) {
        obj = [self objectAtIndex:index];
    }else{
        NSLog(@"[error array:%@ index:%d 越界 count:%d | 在文件:%s  第:%d 行]",self,index,[self count],file,line);
    }
    return obj;
}
@end

//用法就是
[arrayObject OBJECT_AT(index)];

还需要这样处理的函数有 [NSDictionary setObject: forKey:] ,[NSString substring]

//url正则匹配,这种非常简洁高效,前提是保证url没有中文空格 ,结束判断是以中文空格为条件的。
NSString *urlPattern = @"(http|ftp|https)://([^\u4E00-\u9FA5^ ])*";
还有个emoji字符的匹配,这里显示不了就不贴上了。






你可能感兴趣的:(2013年中技术总结,宏的应用,断言,NSArray越界精确报错,弧度角度转换,url简单匹配)