使用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。

时间: 2025-01-07 17:25:14

使用ARC必须遵守的规则的相关文章

必须遵守的规则

1.睡觉规律(晚上10点之前上床,早上8:30之前起床) 生活规律的遵守靠的是自制力,而自制力背后其实是自己的意志力,而意志力背后就是我的做人思想.生活规律的目的,是为了让自己的身体健康,可以生存更长的时间. 2.每周必须最少吃一次鱼,吃一次水果.(只要有钱就能实现) 目的也是补充自身所需的营养,让自己的身体健康,少生病. 3.绝对不赌钱,不嫖娼,不吸毒(凡是有这类嗜好的人,距离远远的) 目的是为了不让自己堕落,因为我还有很多事情要做和想做,堕落了就做不了了. 4.绝对不焦虑,不钻牛角尖 目的是

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

JBOSS EAP6 系列二 客户端访问位于EAR中的EJB时,jndi name要遵守的规则

EJB 的 jndi语法(在整个调用远程ejb的过程中语法的遵循是相当重要的) 参见jboss-as-quickstarts-7.1.1.CR2\ejb-remote\client\src\main\java\org\jboss\as\quickstarts\ejb\remote\client\RemoteEJBClient.java 中的注释: <span style="font-size:18px;"><span style="font-size:18p

所有程序员都应该遵守的 11 条规则

看到一篇翻译很好的博文,在这分享下 1: 技术是你获取解决方案的方法,而不是解决方案本身 我们可以得意忘形地使用最新的JavaScript框架-嗯哼,Angular-IoC 容器,编程语言,甚至操作系统.但作为一个程序员,所有这些东西并不是问题真正的解决方案,相反,它们只是帮助我们解决问题的简单工具. 在面对那些我们喜欢或是当前非常流行的特殊技术时,我们必须非常小心,而不是变得过于疯狂.以免步入这样一个险境:仅仅因为我们手里拿了一把闪闪发亮的锤子,就把所有的问题都看作钉子. 2: 对代码而言,“

iOS arc VS mrc学习笔记

一.* Core Foundation与objective-c Object进行交换 * 对于Core Foundation与objective-cObject进行交换时,需要用到的ARC管理机制有: (1) (__bridge_transfer) op or alternatively CFBridgingRelease(op) is used to consume a retain-count of a CFTypeRef while transferring it over to ARC.

ARC与MRC

一.通过引用计数管理内存 1.引用计数.通过引用计数管理内存.对象被创建出来时,引用计数至少为1,通过retain使引用计数递增,通过release.autorelease使引用计数递减,引用计数为0时,对象所在的内存为可重用,所有指向该对象的引用都无效. 2.dangling pointer.指向对象的引用计数为0的引用.使用dangling pointer不一定使程序崩溃,崩溃是否,看对象内存是否被覆写. 3.引用树.ios应用程序中的root object为UIApplication对象.

非ARC项目转换成ARC项目的相关支持

1.将项目编译环境改成arc 将红圈处从No 改成Yes 如果你现在的工程不支持ARC技术,你可以通过一个自动转换工具来转换你的工程(工具在Edit>Refactor>Convertto Objective-C ARC),这个工具会自动所有工程中手动管理内存的点转换成合适自动方式的(比如移除retain, release等).这个工具会转换工程中所有的文件.当然你可以转换单个文件. 2.下面的这些函数:dealloc,retain, release, retainCount, autorele

理解 Objective-C 的 ARC

英文原文:Understanding Automatic Reference Counting in Objective-C 自动引用计数(Automatic Reference Counting, ARC)把压在程序员们肩头的管理内存的重担卸除了不少,更不用说让跟踪内存泄漏那样的烦心事也少了很多.不过,虽然ARC很棒,我们仍然不能完全把内存管理这回事儿抛在脑后. 这篇文章将要讨论以下方面的问题,帮助大家快速进入ARC的世界. 内存的引用计数: 快速复习 ARC的工作原理 在工程中开启ARC A

ARC(Automatic Reference Counting )技术概述

此文章由Tom翻译,首发于csdn的blog 转自:http://blog.csdn.net/nicktang/article/details/6792972 Automatic Reference Counting (ARC) 是一个编译期的技术,利用此技术可以简化Objective-C编程在内存管理方面的工作量. 这里我把此技术翻译为自动内存计数器管理技术,下图是使用和不使用此技术的Objective-C代码的区别. ARC技术是随着XCode4.2一起发布的,在缺省工程模板中,你可以指定你