iOS Tips

版权归Aaidong所有〜转载需声名〜  欢迎大家访问: http://blog.csdn.net/aaidong

1、$(SRCROOT)    // 表示当前文件夹。

2、CGFloat iconFrameY = CGRectGetMaxY(_timeFrame); // 取_timeFrame的Y的最大值。同样CGRectGet可以取到关于frame的其它所有的值。

3、我们经常会根据计算出的文字大小来布局视图,如果你遇到这些字符串,而且没有对-inf进行特殊处理的话,很有可能App就运行异常了。现在App有很多用户自行输入内容,如评论,信息等,这些很容易让一些恶意用户输入并上传这些bug文本,那么你的App就很容易异常了,所以还是有必要进行一些特殊处理的。这些特殊的字符串一般不会由本地App产生,而是用户产生,建议在服务器端处理。本地简单的处理方法就是Trim一下:

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithRange:NSMakeRange(0xAD, 1)]];


4、常量还是宏
全局常量不可使用宏定义
我们经常看到一些用宏定义的通知,关键字等。其实这么做是非常危险的,因为宏很可能被重定义,而且引用不同的文件可能会导致宏的不同,所以尽量使用const来定义常量。

5、dispatch_once
为保证线程安全,所有单例都用dispatch_once生成,保证只执行一次,这也是iOS开发常用的技巧。

6、weak & strong self

常看到一个block要使用self,会处理成在外部声明一个weak变量指向self,在block里又声明一个strong变量指向weakSelf:

__weak __typeof(self)weakSelf = self;
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
    __strong __typeof(weakSelf)strongSelf = weakSelf;

}];
weakSelf是为了block不持有self,避免循环引用,而再声明一个strongSelf是因为一旦进入block执行,就不允许self在这个执行过程中释放。block执行完后这个strongSelf会自动释放,没有循环引用问题。


7、当使用%@输出一个对象时,ObjC会调用个对象的description返回对应的信息进行输出,默认情况下如果我们不重写description方法,输出内容是类名和地址,例如Person则输出“<Person: 0x100202310>”。

需要强调的是千万不要在重写description中打印输出self,因为当输出self时会调用该对象的description方法,如此一来就会造成死循环。


8、当 automaticallyAdjustsScrollViewInsets 为 NO 时,tableview或者scrollview 是从屏幕的最上边开始,即从状态栏开始。


9、在plist里设置):
首先设置key:Status bar is initially hidden    为YES
然后设置key:View controller-based status bar appearance  为NO
即可实现全局隐藏状态栏。


10、NSIndexPath的创建

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];


11、Cell刷新

(1)、刷新指定row或rows

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:selectedIndexPath,nil] withRowAnimation:UITableViewRowAnimationNone];

(2)、刷新某个section内cell

[tableView reloadSections:section withRowAnimation:UITableViewRowAnimationNone];


12、在imageView不变的情况下,让imageView里的图片旋转90°

[UIImage imageWithCGImage:image.CGImageRef scale:1 orientation:UIImageOrientationLeft];
相对于 transform 是作用在UIImageView上的,而这个方法却是直接作用在image上的。


13、cell禁止选中

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];


14、在C语言中,如何输出百分号呢?
很简单,只要在格式控制符里输入2个 %% 就可以了,例如:printf("%d%%\n",90);
这样就会得到 90% 。

15、怎样取float,带前x位小数
%.xf   显示小数点后x位 

16、怎样取float的前两位小数
floor(value*100) / 100  // 向下取整后保留两位。
ceil(value*100) / 100   // 四舍五入后取整保留两位。

17、UINavigationController 的 pushViewController不起作用
UINavigationController 一般不需要自己显示的去初始化。UIViewController里面有这个属性了,如果检测不为空,直接用就可以了。
如果你想用pushViewController: animated: 这个方法,就要初始化前面那个nav(原理就是使它是一个栈,你push的时候是往里面push了一个viewController)。

例: VCa.nav --> push  VCb
那么在初始化 VCa 时需要 :
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:VCa];

18、无心发现,慎用。
    if (arc4random_uniform(100) > 90) {
        // 程序10%的闪退。
        exit(0);
    }

19、label自适应
adjustsFontSizeToFitWidth:文字内容自适应标签度,默认NO 
label.adjustsFontSizeToFitWidth = YES;
[label sizeToFit] 是缩小label的尺寸去适应文本的大小



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值