内存空间Zone的挖掘

NSZone 是苹果对内存分配和释放的优化方式。NSZone不是一个对象;它是一个难懂的C结构,它被用于纪录关于内存处理(管理)一系列对象的信息。你几乎不需要担忧你自己的应用(applications)是怎样管理你自己的空间(zones)的 ;Cocoa透明地管理它。默认的NSZone在程序启动和所有对象被分配时创建。

错误类error的学习

获取系统的错误信息

比如移动文件时,获取文件操作错误:

  NSError *e = nil;
  [[NSFileManager defaultManager] moveItemAtPath:sourcePath toPath:targetPath error:&e];
  if (e) {
    NSLog(@"move failed:%@", [e localizedDescription]);
  }
先定一个空的错误信息
  NSError *e = nil;
取地址
  &e   
如果有错误信息,打印错误的本地化描述
  if (e) {
    NSLog(@"move failed:%@", [e localizedDescription]);
  }

iOS程序的五种状态

IOS应用程序5种状态

  1. Not running:应用还没有启动,或者应用正在运行但是途中被系统停止

  2. Inactive:当前应用正在前台运行,但是并不接收事件(当前 或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不 同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时 间比较长的情况是:当用户 锁屏时,或者系统提示用户去响应某 些(诸如电话来电、有未读短信等)事件的时候。

单例UIApplication-总结

If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init.

UIKIT_EXTERN int UIApplicationMain (

   int argc, 
   char *argv[], 
   NSString * __nullable principalClassName, 
   NSString * __nullable delegateClassName
);

OC关键字

#import和#include的区别

当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了

OC的实例方法和类方法的区别

-对象方法 即OO的基本精神之一 —— 封装/信息隐藏,这个需要你对OO有理解

+类方法 一般用作命名空间,用以组织一组功能函数;又或用作类的工厂函数,用以产生类的对象;不管哪种,都需要有大型项目的经验,才知道如何组织程序的复杂性及使用设计模式

NSSet_集合(无序)

NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。

iOS中 @synthesize 和 @dynamic 的区别

@synthesize 实际的意义就是 自动生成属性的setter和getter方法。

@dynamic 就是要告诉编译器,代码中用@dynamic修饰的属性,其getter和setter方法会在程序运行的时候或者用其他方式动态绑定,以便让编译器通过编译(指定一个函数或者其他类的方法作为动态属性的setter、getter方法的运行时实现)。