1.强指针:默认的状况下全部的指针都是强指针,关键字__strongjava
弱指针:__week关键字修饰的指针ui
2.ARC:编译器将自动在代码合适的地方插入retain、release、autoreleasespa
ARC的判断准则,只要没有强指针指向对象,对象就会被释放代理
3.判断是不是ARC指针
查看项目信息;不能使用retain、release、autorelease、retainCount,在dealloc方法中不能使用[super dealloc]code
正常建立对象,不用手动释放对象对象
4.ARC下循环引入的问题,解决办法一端使用强指针一端使用弱指针blog
5.@property参数继承
strong强指针内存
week弱指针
6.__week Person *p=[[Person alloc]init];//不合理,对象一建立出来就被释放掉,对象释放掉后,ARC把指针设置为nil
7.分类的使用,扩展原来类的方法
#import "Student.h"
@interface Student (study) -(void)run; @end
#import "Student+study.h"
@implementation Student (study) -(void)run{ NSLog(@"study run"); } @end
分类里的方法跟原来的方法同样使用,若是分类中和类中方法名同样,优先调用分类的方法
8.非正式协议
所谓的非正式协议就是类别,即凡是NSObject或者其子类的类别,都是非正式协议
9.扩展-特殊的分类
分类名为空,能够增长类的实例变量和方法,可是方法须在类自己的.m文件中实现
变量和方法至关于私有
10.block的定义
int (^myblock)(int,int)=^(int a,int b ){ };
调用方式:
myblock(1,2);
能够再给myblock赋值
22.typedef bolck
typedef int (^Myblock)(int,int)=^(int a,int b ){ };
Myblock myblock1,myblock2;
23.block内能够访问外部的变量
当定义block的时候,block会把外部变量的值以const的方式复制一份,放到block所在的内存中,不能修改
全局变量能够修改
外部变量加__block那么block内部再也不以const的方式拷贝,能够在block内部修改,再后面的代码中,所有使用的是堆区空间
24.block的应用场景,把代码块做为参数传递
或者block做为返回值
25.助记符 inlineBlock
26.protocol相似java的借口,但协议中的方法不是所有必须实现
步骤:
定义协议
@protocol 协议名称<NSObject>
@end
采纳协议
@interface Person:NSObject <协议1,协议2>
@end
实现协议的方法
当遵照了某个协议后,就有了这个协议中全部方法的声明
协议还能够遵照其余的协议
OC不能继承多个类,可是可以遵照多个协议
27.protocol方法的修饰符
必须实现@required
选择实现@optional
28.id类型后面加<协议名>表示只能赋值遵照了协议的对象
类名后面加<协议名>表示只能赋值遵照了协议的当前类的对象
29.协议代理模式
传入的对象,代替当前类完成了某个功能,称为代理模式
30.@protocol
在.h文件中用@protocol 协议名 代替import导入协议
在.m文件中导入协议
在main文件中再使用时导入协议