iOS 零碎知识点总结

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 

5)当应用程序被推送到后台的时候调用,所以要设置后台继续运行,则在这个函数中设置:

- (void)applicationDidEnterBackground:(UIApplication *)application 

6)当应用程序从后台将要重新回到前台的时候调用:

- (void)applicationWillEnterForeground:(UIApplication *)application 

7)当应用程序将要推出时被调用,通常是用来保存数据和一些退出前的清理工作:

- (void)applicationWillTerminate:(UIApplication *)application 

6.判断view是不是指定视图的字view:

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里尽量不要做耗时操作。


你可能感兴趣的:(iOS软件开发)