oc总结

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 allloc  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

猜你喜欢

转载自www.cnblogs.com/kinghyt/p/10421253.html