• 使用ARC必须遵守的规则


    l        不可以再显示调用dealloc、或实现调用retain、release、retainCount、autorelease这些方法。也不能使用@selector(retain)@selector(release),等等。

    ARC下去自定义dealloc方法不需要调用 [super dealloc](实际上如果你调用了 [super dealloc],编译器会报错)。super的调用是由编译器自动强制执行的。

    l        不能使用NSAllocateObjectNSDeallocateObject

    使用alloc来创建对象,由ARC来管理对象运行时的释放。

    l        不能在C语言的结构体中使用对象指针。

    建议使用Objective-C的class来管理数据格式,来代替C语言的struct

    l        不能隐式转换 id和void *。

    你必须告诉编译器转换的类型。当你需要在obj-C的对象和Core Foundation 类型之间转换时,你可以通过函数的参数来做。详见“Managing Toll-Free Bridging”

    l        不能使用NSAutoreleasePool对象。

    l        不能使用memory Zone。

    因为现在Objective-C运行时已经忽略NSZone了,所以没必要再使用NSZone了

    Property 属性

    l        assign: 简单赋值,不更改索引计数(Reference Counting)。

    l        copy: 建立一个索引计数为1的对象,然后释放旧对象(开辟新的内存地址)

    l        retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

    retain的实际语法为:

    - (void)setName:(NSString *)newName {

        if (name != newName) {

           [name release];

           name = [newName retain];

           // name’s retain count has been bumped up by 1

        }

    }

    说了那么麻烦,其实接下来的话最重要:

    如果你不懂怎么使用他们,那么就这样

    ·         使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)

    ·         使用copy: 对NSString

    ·         使用retain: 对其他NSObject和其子类

    l        nonatomic关键字:

    atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

    iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC)

    l        strong关键字:

    strong 用来修饰强引用的属性;对应原来的retain。

    该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者。

    l        weak关键字:

    weak 用来修饰弱引用的属性;对应原来的assign。

    但是不同的是当对象被释放以后,对象自动赋值为nil;并且,delegate 和 Outlet 苹果推荐用 weak 属性来声明。同时,如上一回介绍的 iOS 5 之前的版本是没有 __weak 关键字的,所以 weak 属性是不能使用的。这种情况我们使用 unsafe_unretained。

  • 相关阅读:
    由 Rest参数 和 Spread扩展运算符想到的...
    输出数组重复项
    echarts 踩坑记
    es6 Promise.all() 和 Promise.race() 区别
    关于Promise.all
    移动端弹出层平滑滚动和fix定位的冲突
    ES6 数组和字符串
    IE9以下 placeholder兼容
    jQuery设置聚焦并使光标位置在文字最后
    处理GitHub不允许上传大于100M文件问题
  • 原文地址:https://www.cnblogs.com/yangmx/p/4128106.html
Copyright © 2020-2023  润新知