美文网首页
OC总结(二)

OC总结(二)

作者: 李毅然 | 来源:发表于2016-07-16 15:20 被阅读0次

    一.内存问题
    (1).内存溢出
    (2).野指针(过度释放)
    二.内存管理方式:

    (1)MRC:手动管理引用计数.对对象完成后需要release.
    Man * man = [[Man alloc]init];
    [man release];
    

    // 集合类型
    (i). addObject 会使引用计数 + 1
    (ii).removeObject 会使引用计数 - 1

    (2).ARC:自动管理引用计数(常用.基于MRC)

    (i).strong (ARC,强引用) 会使引用计数 + 1
    (ii).weak (应用于对象类型(NSObject子类),弱引用,对象被释放时,会自动置空)
    (iii).retain(MRC,强引用)会使引用计数 + 1
    (iv).copy(拷贝)原来引用计数不变,新生成的 + 1
    (v).assign(用户与简单的数据类型,不会产生引用计数)
    三.引用计数
    (1).alloc,copy,retain 会使引用计数 + 1
    (2).release,autorelease 会使引用计数 - 1
    (3)当引用计数 = 0 时,会调用dealloc方法 引用计数不变(为1)
    四.实现对对象的拷贝
    (1).需要签订NSCoping协议
    (2).需要实现copyWithZone方法

    Man * newMan = [man copy];
    NSLog(@"newMan : %@ - oldMan : %@",newMan,man);
    

    五.KVC(NSObject) Key-Value-Coding键值编码,间接访问成员变量的方式
    六.只要是NSObject的子类,就包含以下方法
    (1)valueForKey
    (2) valueForKeyPath
    (3) setValue: forKeyPath:
    七.在工程下使用文件
    // 加在Build Phases下的编译source下
    (1).如果在ARC工程下使用MRC的文件
    -fno-objc-arc
    (2). 在MRC的工程下使用ARC的文件
    -fobjc-arc
    三.类的扩展方式
    (1).category(类目)
    创建:

    屏幕快照 2016-07-16 下午2.55.05.png
    屏幕快照 2016-07-16 下午2.55.59.png

    (i).通过Objective-C File创建
    (ii).会产生两个文件 .h .m
    (iii).文件名会以 类名+Category名
    使用:
    (i). 向对应文件中添加需要添加方法
    (ii). 引入到你对应要使用的位置
    (2).extends(延展)
    延展,一般定义在.m中,其中声明一些私有的属性/方法
    (3).delegate(代理)
    在之前简书上已整理
    (4).继承
    四.iOS9的新特性
    (1).nonnull 修饰的属性,对应setter和getter方法
    (2).nullable 修饰的属性,对应setter和getter方法
    (3).null_resetable
    五.泛型(带泛型的容器(规定了容器中所存储的类型))
    (1).泛型数组

     NSMutableArray<NSString *> * array = [NSMutableArray arrayWithObjects:@"123", nil];
    

    (2).泛型字典

    NSMutableDictionary<NSString *,NSString *> * dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小花儿",@"name", nil];
    

    (3).自定义泛型

    Truck<Pserson *> * truck = [[Truck alloc]init];
    

    Truck.h

    // 自定义泛型声明方式
    //@interface 类名<泛型名>: 父类
    // 自定义泛型,声明后,泛型名,可以应用在属性,方法中
    // 泛型名 等效于 类型修饰(例: NSString *)
    @interface Truck<__covariant objectType> : NSObject
    

    六.协变性,逆变性
    (1). __covariant 协变性 子类在给父类赋值时,自动强转

    //Truck<NSArray*> Truck<NSMutableArray*>
      truck1 = truck2;
    

    (2).__contravariant 逆变性 父类给子类赋值,自动强转(暂时不知道应用何处)

        truck2 = truck1;
    

    七.__kindOf
    加__kindof修饰后,返回的类型及其子类型,都可以接收这个返回值

     Truck * truckKindOf = [[Truck alloc]init];
    NSMutableArray * arr = [truckKindOf returnArray];
    

    Truck.h

    -(__kindof NSArray *)returnArray;
    

    Truck.m

    // 方法的返回值,是一个不可变数组/可变数组
    -(__kindof NSArray *)returnArray{
    //    return @[];
    return [NSMutableArray array];
    }
    

    相关文章

      网友评论

          本文标题:OC总结(二)

          本文链接:https://www.haomeiwen.com/subject/sblujttx.html