oc总结: 类: @interface Person:NSObject{ //成员变量 @protected @private @public } @property(nonatomic,copy)(NSString*)name; -(void)test; +(void)test2; -(void)test3:(int )a; -(void)test4:(int )a andname:(NSString*)name; -(instancetype)initWithname:(NSString*)name; @end 类的实现: @implementation Person //重写init方法: -(instancetype)init{ self = [super init]; if(self){ //准备工作 //界面布局 读取数据库 数据处理 } return self; } //需要传参数 则自定义init方法 -(instancetype)initWithname:(NSString*name){ self = [super init]; if(self){ self.name = name; //准备工作 //界面布局 读取数据库 数据处理 } } @end 对象: Person *p=[Person new]; Person *p1 = [[Person alloc]init]; p.name= @“jack”; 相当于:[p setName:@“jack”];//存在内存管理 内存管理:对象的引用计数 retaincount 什么时候有拥有权:new alloc copy mutableCopy 谁拥有拥有权:1、代码块 2、对象 用strong retain copy 声明拥有权 对象中的属性变量由dealloc释放 重写set get方法: -(void)setName:(NSString*)name{ if(self.name!=name){ [self.name release]; _name = [name copy]; } } 循环引用:类里面 只有属性变量才可能出现循环引用 NSSring NSMutablestring 用copy 数组 字典一样 Protocol协议:定义了一系列方法 @proocol Name:<NSObject> @required //必须实现的方法 @optional //可选择实现的方法 @end Delegate模式:回调数据 配置数据 1.定义协议 @protocol RentHouse <NSObject> -(void)test:(int age); @end 2.定义属性变量delegate用于保存使用者对象 @property(nonatomic,assign)id <RentHouse>delegate; 3.完成功能回调数据 -(void)renthouse{ if([self.delagate respondsToSelector:@selector(test:)]){ [self.delegate test:20]; } } 使用者 1.服从协议 @interface Person:NSObject <RentHouse> @end 2.实现协议里required的方法 -(void)test:(int )age{ } 3.创建对象 设置代理 Agent *xw = [Agent new]; xw.delagate = self; Block实现回调 (^) 定义block类型 void(^)(int count); 定义block类型的变量 void(^add)(int count); Block变量初始化: add = ^(int count){ } void (^add)(int count)=^(int count){ } 通过__block来改变外部变量的值 定义block的属性变量: @property(nonatomic,copy)void(^)(int count) myblock; -(void)test:void(^)(int count) myblock; 使用typedef void(^blockname)(int count); @property(nonatomic,copy)blockname myblock; -(void)test:(blockname)block; [a test:^(int count){ } block(20); Category类别:向一个已知的类添加方法 @interface Person(age) -(int)ageWithfriend; -(int)agelncompany; @end 在需要使用到新方法的地方导入这个类别 Extension 扩展 类里面定义私有属性或者方法 @interface Person() //私有属性 私有方法 @end @implementation Person -(void)test; @end