1.四大皆空NULL,nil,Nil,NSNull的区别
nil是OC的空对象,地址指向空的对象。Nil是Object-C类的字面零值。NULL是C的空地址,地址的数值是0,是个长整形。NSNull用于解决向NSArray和NSDictionary等集合中添加空值的问题。
2.控件不能交互的一些原因:1)控件的userInteractionEabled = NO; 2)透明度小于0.01,alpha;3)控件被隐藏的时候,hidden = YES;4)子视图的位置超出了父视图的有效范围,子视图无法交互;5)需要交互的视图,被其他视图盖住(其他视图开启了用户交互)。
3.修改UITextField中Placeholder的文字颜色:[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
4.视图的生命周期:1)alloc创建对象,分配空间;2)init(initWithNibName)初始化对象,初始化数据;3)loadView 从nib载入视图,除非你没有使用xib文件创建视图;4)viewDidLoad载入完成,可以进行自定义数据以及动态创建其它控件。5)viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上;6)viewDidAppear视图已在屏幕上渲染完成。6)viewWillDisappear视图将被从屏幕上移除之前执行。7)viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了。8)dealloc视图被销毁,此时需要对你在init和viewDidLoad中创建的对象进行释放。9)viewWillUnload当内存过低,即将释放时调用。10)viewDidUnload当内存过低,释放一些不需要的视图时调用。
5.应用程序的生命周期
1)启动单还没进入状态保存:
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2)基本完成程序准备开始运行:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
3)当应用程序将要进入非活动状态,应用程序不接收消息或者事件,比如来电话了:
- (void)applicationWillResignActive:(UIApplication *)application
4)当应用程序进入活动状态执行,应用程序接收消息或者事件:
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
BOOL isView = [textView isDescendantOfView:self.view];
7.系统键盘通知消息:
1)UIKeyboardWillShowNotification -将要弹出键盘
2)UIKeyboardDidShowNotification -显示键盘
3)UIKeyboardWillHideNotification - 将要隐藏键盘
4)UIKeyboardDidHideNotification - 键盘已经隐藏
5)UIKeyboardWillChangeFrameNotification - 键盘将要改变frame
6)UIKeyboardDidChangeFrameNotification - 键盘已经改变frame
8.把tableView里cell的小对勾的颜色改成别的颜色:
tableView.tintColor = [UIColor redColor];
9.调整tableView的separaLine线的位置:
tableView.separatorInset = UIEdgeInsetsMake(0,100,0,0);
10.设置滑动的时候隐藏navigationBar
navigationController.hidesBarsOnSwipe = Yes;
11.截屏:
- (UIImage*)cutOffImageFrom:(UIView*)view {
UIGraphicsBeginImageContext(view.frame.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
12.性能相关:
1)视图复用,比如cell
2)数据缓存,比如用SDWebImage实现图片缓存
3)任何情况下都不能堵塞主线程,把耗时操作尽量放到子线程
4)如果有多个下载同时并发,可以控制并发数
5)在合适的地方尽量使用懒加载
6)重用重大开销对象,如NSDataFormatter,NSCalendar
7)选择合适的数据存储
8)避免循环引用。避免delegate用return、strong修饰,block可能导致循环引用,NSTimer也可能导致内存泄漏。
9)当涉及到定位的时候,不用的时候最好把定位服务关闭。
10)加锁对性能有重大开销
11)界面最好不要添加过多的subViews
12)TableView如果不同行高,那么返回的行高最好做缓存。
13)ViewDidLoad里尽量不要做耗时操作。