零碎知识点总结(不定时更新)

1、[UIImage imageWithName:@"xxx.png"] 和 [[NSBundle mainBundle] pathForResource:xxx  ofType: xxx] 两种加载图片方式比较

    a、[UIImage imageWithName:],把图片加载到系统内存cache中,系统不定时清理内存,正是不定时如果图片过多过大还没有

      清理会导致内存溢出,但是它只需要加载图片一次,以后调用直接从缓存中取,只有频繁使用的小图片使用它来加载效率更高

    b、[[NSBundle mainBundle] path...],直接从磁盘加载图片,图片下次加载的时候会自动释放第一次的图片,你也可以手动释放内存

2、static NSString * const

    static:

       a、局部静态变量 :初始化一次,下次调用不进行初始化

       b、外部静态变量/函数:用于作用域限制,仅在本文件使用

       c、静态数据成员/成员函数(c++):针对类而不是某个特定对象来说,比如:类中计数

    const:

       a、定义const常量: const double pi=3.1415

       b、保护被修饰的东西,防止被意外修改: const int i {i = 1; // 修改报错}

       c、如果const位于*的左边,用来修饰指针所指向的变量,表示指针指向为常量;如果const位于*右边,用来修饰指针本身,

         表示指针本身是常量

         如: const int * a;

            int const * b;

            int * const c;

            这里的话,const int 和 int const是一样的,const都位于*的左边,修饰的是*a,*b,表示*a是常量,不能被更改

            比如赋值:*a = 10和*b = 10 这个都是错误的

            而第三个const位于*的右边,修饰的是c,表示c是常量,不能被修改 

            比如赋值:int age = 10;  c = &age  这里的c赋值是错误的      

    static NSString *const:

       仅声明一次的不能修改的指针,常用语定义常量

3、数组乱序:

 1 NSArray *array = @[@1,@5,@9,@2,@6,@8];
 2     
 3     
 4     array = [array sortedArrayUsingComparator:^NSComparisonResult(NSNumber *no1, NSNumber *no2) {
 5         
 6         int seed = arc4random_uniform(2); // 随机产生0和1
 7         
 8         if (seed){ // 为1时候
 9             
10             return [no1 compare:no2];
11         }else{ // 为0时候
12             
13             return [no2 compare:no1];
14         }
15     }];
16     
17     NSLog(@"%@",array);

4、类方法load和initialize的调用

 1 // 当程序加载进内存时候调用
 2 + (void)load
 3 {
 4     
 5 }
 6 
 7 // 当第一次使用此类的时候调用
 8 + (void)initialize
 9 {
10     
11 }