一.内存问题
(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(类目)
创建:


(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];
}
网友评论