编程技巧 - 2
来源:互联网 发布:网络主播杨博在哪直播 编辑:程序博客网 时间:2024/06/08 10:12
8.调试的输出的宏处理
遇到一个输出日志的方法,很强大:
/** * 是否输出平台日志(默认为NO不输出,如果需要输出传值YES) [2.0] * * 注意:日志只为调试用,正式出包,请设置为NO,或者不调用此接口 * * @param isLog 是否输出日志 */+(void)isOutputLog:(BOOL)isLog;
+(void)isOutputLog:(BOOL)isLog{ [[SYSystemInfo shareSystemInfo] setIsLog:isLog];}
尝试了解其实现原理,上面就是一个属性的set方法的实现,非常巧妙:
@property(nonatomic,assign) BOOL isLog;
/** 若干代码块 **/ LOG(@"activate37SDK error, error = %@",message); if (_isLog) { DLog(@"activate37SDK error, error = %@",message); }/** 若干代码块 **/
进入LOG:
#ifdef DEBUG#define LOG(...) NSLog(__VA_ARGS__);#else#define LOG(...)#endif
这种LOG就是Debug调试模式下想输出调试,而在release发布模式下想去掉NSLog的常用写法
使用如下,和NSLOG没两样:
LOG(@"通知服务器的outOrderID 值是:%@",outOrderID);
进入DLog:
#define DLog(format,...){\NSLog((@"< 37File:%@ ,Line:%d ,Function:%s >:" format),[[NSString stringWithUTF8String:__FILE__] lastPathComponent],\__LINE__,__func__,##__VA_ARGS__);\}其实就是在可能想要输出调试结果的地方添加if判断语句根据isLog的值,然后适当输出罢了,非常巧妙吧!
9.布尔判断的0和1
[rotatebtn setTag:1];[otherRotatebtn setTag:0];/** 其他操作 **/-(void)Rotate:(UIButton *)rotate{ if (rotate.tag) { } else { }}将tag设个0和1,IF判断前所未有的简洁嘿嘿
10.NSDictionary 转 NSMutalbDictionary
如果这样:
NSMutableDictionary* newDic = [dic copy];浅复制,崩定了
要这样:深复制:
NSMutableDictionary* newDic = [dic mutableCopy];
11.UITableView底部多余的行数去掉:
UIView* footer = [[UIView alloc] initWithFrame:CGRectZero]; tableview.tableFooterView = footer;
12.数组添加常量
我们都知道数组只可以添加对象,一般有两种方法来达到数据添加基本数据类型的效果:
(1)先转成NSNumber:
[tmpArray addObject:[NSNumber numberWithUnsignedInteger:section]];
(2)先转成NSString:
[tmpArray addObject:[NSString stringWithFormat:@"%ld", (long)indexPath.row]];
13.桥梁结构
渠道、运营、CP,如果运营想充当一个桥梁的作用(并且这个桥梁具备阻挡渠道和CP的直接对接的作用),这个时候就完美体现出封装的魅力了。
然后,渠道和CP需要的数据通讯,操作交互等那要怎么做? 不用担心,有回调和通知:
通知:渠道方初始化操作内部会自动帮你post,相当于执行
回调:要我们去实现delegate协议,然后自动调用
14.好看的注释格式
/** * 设置工程方向 * * * @param portrait 为YES时支持默认竖屏方向,NO时不支持 * @param portraitUpsideDown 为YES时支持向下竖屏方向,NO时不支持 * @param landscapeLeft 为YES时支持向左横屏屏方向,NO时不支持 * @param landscapeRight 为YES时支持向右横屏屏方向,NO时不支持 */
15.优雅地判断屏幕方向
BOOL isLandscape = NO;UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];isLandscape = ((orientation==UIInterfaceOrientationLandscapeRight)||(orientation==UIInterfaceOrientationLandscapeLeft));if(isLandscape){ //横屏`}else{ //纵屏}
由这个枚举类型可以知道,用UIDevice效果是完全一样的:
typedef NS_ENUM(NSInteger, UIInterfaceOrientation) { UIInterfaceOrientationUnknown = UIDeviceOrientationUnknown, UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft};
BOOL isLandScape = NO;UIDeviceOrientation oritation = [UIDevice currentDevice].orientation;isLandScape = ((oritation == UIDeviceOrientationLandscapeLeft) || (oritation == UIDeviceOrientationLandscapeRight));if (isLandScape){ //横屏}else{ //竖屏}
15.用宏来获取key window:
UIWindow *keyWindow = GetKeyWindow;#define GetKeyWindow KEYWINDOW ? KEYWINDOW : [[UIApplication sharedApplication].windows objectAtIndex:0]
16.各类尺寸:
各类尺寸:http://www.zhihu.com/question/20248971
17.自定义UIView的初始化:
- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code [self initialData]; } return self;}- (void)initialData{ // Initialization code}
直接继承initFrame,并且封装初始化操作
待续...
0 0
- 编程技巧 - 封装技巧 - 2
- VC编程技巧2 .
- 编程技巧 - 2
- 编程技巧 - elegant - 2
- Qt编程技巧:2
- 编程技巧 - 适配技巧 - 2
- C++编程技巧学习(2)
- 编程技巧搜集(2)
- 2D 游戏编程技巧
- 2个C编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- 编程技巧
- Hugo简介
- git 回滚
- 经验分享:多屏复杂动画CSS技巧三则
- @property定义的成员变量
- 安卓应用打包和安装的过程
- 编程技巧 - 2
- 内核点滴——delalloc
- 动画特效九:下拉刷新
- Android恶意代码分析与渗透测试
- 简单并查集之带权并查集HDU3038 How Many Answers Are Wrong
- 泰课在线Unity3d 动作游戏全攻略
- HDU 1865 1sting
- 提高iOS开发效率的方法和工具
- java视频教程免费下载