iOS 小知识

原文https://slpowercoder.github.io/

1、去掉按钮的高亮黑

[funcImgBtn setAdjustsImageWhenHighlighted:NO];

2、设置视图属性防止背景图片变形
关于UIViewContentMode的详解
http://blog.csdn.net/iunion/article/details/7494511

//对于UIButton需要设置button中的imageView的contentMode属性
button.imageView.contentMode = UIViewContentModeScaleAspectFill;
//
视图.contentMode = UIViewContentModeScaleAspectFill;
视图.clipsToBounds = YES;

3、当一个页面有多个scrollView(或继承自scrollVIew)的时候,点击状态栏不会回到顶部,可以将非当前显示页的scrollVIew. scrollToTop设置为NO。
4、去掉在UITableViewStylePlain 样式的时候多余的默认cell

_tableView.tableFooterView = [[UIView alloc]init];

5、去掉在UITableViewStyleGrouped 样式的时候默认的组脚高度

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0.001; //越小越好,不能设置为0
}

6、自定义导航栏的返回按钮而造成返回手势的失效的解决办法,对于最顶层的VC我们需要设置enabled = NO,因为最外面一层是不需要该手势的

self.navigationController.interactivePopGestureRecognizer.delegate = self;
self.navigationController.interactivePopGestureRecognizer.enabled = YES;

7、根据十六进制色值返回一个UIColor对象的宏

#define USERCOLOR(string) [UIColor colorWithRed:((float)((string & 0xFF0000) >> 16))/255.0 green:((float)((string & 0xFF00) >> 8))/255.0 blue:((float)(string & 0xFF))/255.0 alpha:1.0]

8、控制屏幕是否锁屏

//值为yes的时候可以防止屏幕黑屏,注意在程序结束点时候要设置为no
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

9、防止自定义导航栏返回按钮时,返回手势失效

self.navigationController.interactivePopGestureRecognizer.enabled = YES;

10、打印函数,可以打印所在的函数,行数,以及你要打印的值

#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

11、 UISwitch的大小直接设置frame是没有用的,可以通过CGAffineTransformMakeScale缩放来设置

12、 load和initialize

//程序在加载类文件时候会调用load,无论实现该方法的类有没有被引用(只要程序运行的时候就会加载该类文件)
+(void)load
//在类被初始化之前会调用一次
+(void)initialize

13、iPad使用UIAlertController会crash
http://stackoverflow.com/questions/31577140/uialertcontroller-is-crashed-ipad
14、GCD的一个用处是可以让程序在后台较长久的运行。在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作,让程序在后台长久运行的示例代码如下:

// AppDelegate.h文件
@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

// AppDelegate.m文件
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self beingBackgroundUpdateTask];
    // 在这里加上你需要长久运行的代码
    [self endBackgroundUpdateTask];
}

- (void)beingBackgroundUpdateTask
{
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}

- (void)endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}

15、 推荐一个国外大大利用消息转发避免后台返回NSNull(后台有时候会返回<null>)而引起的奔溃问题,例如你需要一个字符串他却给你返回了一个“<null>”这样一个NSNull对象,对于少量数据有时候我们会用plist或归档来做缓存,然后后台返回NSNull对象会导致利用plist做缓存失败,plist不支持NSNull类型,你可以用数据库或者归档做缓存。用法很简单,直接把NullSafe.m拖到项目中即可,该文件会在运行时自动加载,该法利用了消息转发机制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 4,381评论 0 4
  • 1.计算有多少组通用公式示例:服务器返回15个数据,每组8个 计算总共多少行通用公式 2.自己写的宏定义要用小k开...
    船长_阅读 4,132评论 1 18
  • 参考此文:http://www.2cto.com/kf/201403/284687.html@看到这个关键字,我们...
    如风家的秘密阅读 3,644评论 0 2
  • 数组中的指针 int array[3] = {11,22,33} • &array[0] 可看做是一个指针,指向...
    lsif的简书阅读 4,417评论 1 7
  • 有管理者问:“我负责很多店面,我的下属——店长——都是分布各个城市,我每个月主要任务就是巡店。如果我在每个店待3天...
    w小郭阅读 3,421评论 0 1