zoukankan      html  css  js  c++  java
  • Objective-C知识总结(4)

    ARC(automatic reference counting)机制

    判断是否是ARC机制

    • ARC机制中不能使用retain release autorelease retainCount
    • 在dealloc方法中不能使用 [super dealloc];

    在ARC下对象释放的判断依据: 对象没有强指针指向

    指针默认的都是强指针,比如我们创建的对象都是默认的强指针

    Person *p1 = [[Person alloc] init];

    __strong 修饰符,修饰这个指针是一个强指针,也可以不写

    __weak   修饰的这个指针是弱指针

    ARC下的循环引用问题

    当两个对象互相拥有的时候,如果定义的时候都用strong,那么就会导致循环引用的问题,双方互相强指针指向,不能被释放

    解决这个问题的方法是:将其中一个以weak定义,就能完美解决这个问题了

    ARC下set方法内存@property参数

    ARC中的@property

    strong:用于OC对象,相当于MRC中的retain

    weak:用于OC对象,相当于MRC中的assign(代理一般用weak,UI控件一般用weak)

    assign:用于基本数据类型,跟MRC中的assign一样

    copy:一般用于NSString,跟MRC中的copy一样

    ARC注意:

    __weak Person *p=[[Person alloc] init];
    // 不合理,对象一创建出来就被释放掉,对象释 放掉后,ARC把指针设置为nil。 

    如何让ARC的项目兼容非ARC的类

    让程序兼容ARC和非ARC部分

    • 转变为非ARC -fno-objc-arc
    • 转变为ARC的, -f-objc-arc 

    在哪里添加编译器标示 -fno-objc-arc如下图

    将MRC转化为ARC(不建议这么使用,若要尝试做好备份)

    分类(Category)

    分类的使用注意事项:

    --------->在分类的声明中不能声明实例变量

    --------->不能定义实例变量 也不能使用 @property

    --------->在分类的方法中,可以访问类中的实例变量

    --------->在分类中存在和类同名的方法  优先访问的时 分类中 的方法

    当在多个类别中有同名的方法的时候,这时候,执行的最后编译的那个类别的同名方法

    分类的 > 原类

    最后编译的分类 >  其他的分类

    分类(Category)非正式协议

    非正式协议就是给NSObject类或Foundation框架中的子类创建的类目(分类),即给它们添加方法,叫做非正式协议

    类的延展的概念

    延展类别又称为扩展(Extendsion)

    Extension是Category的一个特例 其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

    // 这个一般用在.m文件中,作为私有的方法和成员变量
    
    @interface Student ()
    {
       // 可以添加成员变量
    }
    
    // 添加方法
    
    @end 
  • 相关阅读:
    查看ORACLE 数据库及表信息
    JDK API文档下载
    Oracle分析函数
    oracle 自定义类型 type / create type
    ORA-00257归档日志写满的解决方法
    关于dbms_output包的使用
    使用状态模式控制 输入内容自动跳转到相应正则表达式文本框
    C# 使用itextsharp 读取pdf中文字坐标
    Nhibernate/Hibernate 使用多参数存儲過程 出現could not execute query,Could not locate named parameter等錯誤解決
    table详解
  • 原文地址:https://www.cnblogs.com/melodyzhy/p/4684323.html
Copyright © 2011-2022 走看看