zoukankan      html  css  js  c++  java
  • 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 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
  • 相关阅读:
    (todo)数组名 有存储空间吗?
    c和指针 指针数组 关于指针数组
    c面试题 来自android手机 1/6
    c 和指针 二维数组赋予一维数组指针 数组长度 数组与指针长度区别
    c语言优先级面试小结
    hxf 每晚 宏 不用大于小于 求大小
    DelphiX中的DXSprite单元中涉及到修改
    在java开发过程中,添加表时,需要配置一下的目录和文件。
    代码生成器cs的注册方法.
    将一个字符串映射为一个Delphi页面控件属性名
  • 原文地址:https://www.cnblogs.com/kinghyt/p/10421253.html
Copyright © 2011-2022 走看看