内存管理的思考方式2(ARC下)

所有权修饰符

所有权修饰符共有四种

  • __strong
  • __weak
  • __unsafe_unretained
  • __sutoreleasing

__strong修饰符

是id类型和对象类型默认的所有权修饰符,通过__strong修饰符,不必再次键入retain或者release,完美的满足了‘引用计数式内存管理的思考方式’:

  • 自己生成的对象自己持有
  • 非自己生成的对象,自己也可以持有
  • 不再需要自己持有的对象时释放
  • 非自己持有的对象无法释放

前两项只需通过对带__strong修饰符的变量赋值即可达成。通过废弃带__strong修饰符的变量(变量作用域结束或是成员变量所属对象废弃)或者对变量赋值,

都可以做到第三项,最后一项“非自己持有的对象无法释放”,由于不必再次键入release,所以原本就不会执行。

__weak修饰符

__weak是为了解决循环引用问题而存在的,循环引用容易发生内存泄漏。所谓内存泄漏就是应当废弃的对象在超出其生存范围后继续存在。

__weak还有另一优点,在持有某对象的弱引用时,若该对象被废弃,则此弱引用讲自动失效并被置为nil的状态。

__unsafe_unretained修饰符

是不安全的所有权修饰符,尽管ARC式的内存管理是编译器的工作,但附有__unsafe_unretained修饰符的变量不属于编译器的内存管理对象。

__autoreleasing修饰符

时间: 2024-10-31 05:53:37

内存管理的思考方式2(ARC下)的相关文章

关于Qt半自动内存管理的思考及实验

一时兴起,对Qt感了兴趣,决心想要研究一下. 按网上资料配好环境,Windows 7 64bit + Qt 5.3.1 + VS2010. 根据<C++ GUI Qt4 编程>这本书,写出了第一个程序HelloQt,程序如下: #include <QApplication> #include <QLabel> #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif

【Bugly干货分享】iOS内存管理:从MRC到ARC实践

Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 对于iOS程序员来说,内存管理是入门的必修课.引用计数.自动释放等概念,都是与C语言完全不同的.搞明白这些,代码才有可能不 crash.然而就是这么牛逼的内存管理,着实让我这个从 C 转过来的老程序员头疼了一段时间. [C++ 程序员的迷惑和愤怒] iOS 内存管理的核心是引用计数.与众多五年甚至更多以上开发经验的程序员一样,笔者当初是

C++内存管理与分配方式

C++的内存管理与内存分配方式,实际上是两个问题. C++程序在编译与运行过程中,实际上可能用到五种存储区域. 栈(stack).函数运行过程中创建的局部变量都存储在栈上.随着函数或代码块的运行结束,这些局部变量的空间也会被自动回收.栈的优点是栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆(heap).也成为动态存储区.使用new,malloc操作可以动态地分配这部分内存.优点是动态存储区的内存分配和回收都由程序员决定,缺点是如果忘记回收,可能造成内存泄漏,并且分配

内存管理的思考模式

自己生成的对象,自己所持有 使用以下名称开头的方法名意味着自己生成的对象只有自己持有 alloc new copy mutableCopy 下列名称也意味着自己生成并持有对象 allocMyObject newThisObject copyThis mutableCopyYourObject 但是对于以下方法名称,即使用alloc/new/copy/mutableCopy名称开头,并不属于同一类别的方法 allocate newer copying mutableCopyed 非自己生成的对象,

谈谈ios内存管理--持续更新

本文主要谈谈ios内存管理的发展脉络,不足之处,还请指教,相互学习交流.做ios开发,永远无法避开内存管理,无论我们是否有意识去考虑这个事情,但是只要我们写了OC程序,那么就与内存管理有关. 一.内存管理是做什么的? 二.内存管理方式一:MRC (一)引用计数器 (二)原则 (三)alloc.new.copy.mutableCopy.retain.release.dealloc alloc内部实现 引用计数表 (四)autorelease 三.内存管理方式二:ARC (一)__strong (二

iOS开发--漫谈内存管理(一)

1.MRC与ARC 苹果提供两种内存管理机制:一种是MRC(manual reference count),即手动引用计算:另一种是ARC(auto reference count),即自动引用计数.手动引用计,顾名思义,需要程序员主动调用retain.release等方法来管理内存,而自动引用计数方式,则是编译器在编译阶段把内存管理代码自动插入在需要手动调用的地方.这样就把程序员从复杂的管理内存的工作中解放出来,将更多精力放在实现具体的业务逻辑上.需要注意的是,ARC要在xcode4.2或者以

iOS-多线程-内存管理

iOS与OSX 多线程和内存管理  总结 一.              自动引用计数 1.自动引用计数(ARC)就是指内存管理中对引用采用自动计数的技术. 满足以下条件即可使用这种功能: Xcode 版本为4.2以上: 使用LLVM编译器 版本为3.0以上: 编译器选项设置ARC为有效: 2.内存管理/引用计数 内存管理的思考方式: 2.1自己生成的对象,自己持有: 2.2非自己生成的对象,自己也能持有: 2.3不需要自己持有的对象时释放: 2.4非自己持有的对象无法释放: 2.1自己生成的对

Objective-C学习_内存管理学习笔记

  内存泄漏 : 应当废弃的对象在超出生命周期后继续存在 内存管理 : 遵守配对原则,有alloc/new/copy/mutableCopy就要有相对应的release或autorelease 原因 : Oc对象是在堆里面的(动态分配),堆里面的内存由我们程序员来管理 : 对象操作 Objective –c 对应方法 生成并持有对象 alloc/new/copy/mutableCopy等 持有对象 retain 方法 释放对象 release方法 废弃对象 dealloc方法(系统自动调) 内存

内存管理大总结

<link rel="stylesheet" href="http://yandex.st/highlightjs/6.2/styles/googlecode.min.css"> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script><script src="http://yandex.st/highlightjs/6