ARC机制之__strong具体解释


__strong  解析:

默认情况下,一个指针都会使用 __strong 属性,表明这是一个强引用。这意味着,仅仅要引用存在,对象就不能被销毁。这是一种所期望的行为:当全部(强)引用都去除时,对象才干被收集和释放。

只是, 有时我们却希望禁用这样的行为:一些集合类不应该添加其元素的引用。由于这会引起对象无法释放。在这样的情况下,我们须要使用弱引用(不用操心,内置的集合类就是这么干的),使用 __weak
keyword。NSHashTable就是一个样例。

当被引用的对象消失时,弱引用会自己主动设置为 nil。Cocoa的 Notification Center
就是这么一个样例,尽管这已经超出纯 Objective-C的语言范畴

自己更深理解:

1.(weak与strong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;

在OC中strong就相当于retain属性,而weak相当于assign。仅仅有一种情况你须要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类}。子类中又调用了父类{子类又retain了父类},这样都无法release)

2.一旦最后一个指向该对象的strong类型的指针离开,这个对象将被释放,假设这个时候还有weak指针指向该对象,则会清除掉全部剩余的weak指针

以下是笔者看书时遇到的疑问

(1) : __strong在ARC关闭时是否可用

(2): __strong修饰的变量,直接赋值时,赋值的变量的retain是否会自增(被赋值的变量retain是否会自减)

(3): __strong修饰的变量在超出其作用域时retain是否会自减

解答例如以下:

(1): 能

(2): 比如:

;

id __strong obj1 =nil;

id
__strong obj = [[NSObjectalloc]
init];

obj1 = obj;//obj1
持有obj 赋值对象的强引用
会导致obj retain自增

NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

NSLog(@"obj = %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

打印例如以下:

2015-07-22 17:23:22.169字典[724:25567] Retain count is 2

2015-07-22 17:23:22.171字典[724:25567] obj = 2

说明:(1) :当一个对象获得还有一个对象的强引用时,retain++;

(2): 被赋值的变量retain是会自减

(3):

;

id
__strong obj1 =nil;

if(count){

id
__strong obj = [[NSObjectalloc]
init];

obj1 = obj;//obj1
持有obj 赋值对象的强引用
会导致obj retain自增

NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

}

NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj1));

__strong修饰的变量在超出其作用域时retain是会自减

ARC机制之__strong具体解释的更多相关文章

  1. 黑马程序员——ARC机制总结和用ARC建立模型

    ARC 全称:Automatic Reference Counting 使用ARC 只需要在建立一个新的项目的时候把 下面的√打上 Xcode5以后都会默认建议开发者使用ARC机制 新的项目中如果有部 ...

  2. [转]iOS ARC机制 weak strong

    写在开头 虽然距离WWDC2011和iOS 5已经快一年时间,但是很多开发者并没有利用新方法来提高自己的水平,这点在ARC的使用上非常明显(特别是国内,基本很少见到同行转向ARC).我曾经询问过一些同 ...

  3. ARC机制集合内存管理

    // //  main.m //  13-ARC机制集合内存管理 // //  Created by apple on 14-3-21. //  Copyright (c) 2014年 apple. ...

  4. ARC机制下组合关系

    // //  Person.h //  01-autorelease基本概念 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 a ...

  5. ARC机制

    ARC概念及原理 1.了解指针分类 (1)强指针:默认的情况下,所有的指针都是强指针,关键字strong (2)弱指针:_ _weak关键字修饰的指针 声明一个弱指针如下: _ _weak Perso ...

  6. iOS开发ARC机制下的内存管理技术要点

    转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...

  7. OC内存管理、非ARC机制、MRR机制

    在Xcode里面,默认为ARC(auto reference counting),也就是自动内存管理机制,在这里我们要了解的是内存管理,肯定是不能让系统帮我们管理内存,我们需要将ARC关闭,首先在左边 ...

  8. 【iOS开发-34】自己主动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容

    自己主动释放池@autorelease面试频率可能会吧release还要高. (1)在自己主动释放池@autoreleasepool{}中alloc一个对象后(如p1).仍然须要用[p1 autore ...

  9. ARC中__weak;__strong;__unsafe_unretained;修饰词

    测试代码: // Human.h代码 @interface Human : NSObject @property (nonatomic, weak) Cat *pinkCat; @property ( ...

随机推荐

  1. xtu数据结构 G. Count the Colors

    G. Count the Colors Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Jav ...

  2. iOS学习笔记14-网络(三)WebView

    一.WebView WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和WKWebView,UIWebView是iOS2之后开始使用,WKWebView是在i ...

  3. Python之注册表增删改查(干货)

    在Windows平台下,对注册表的增删改查的需求比较多,微软提供了很多用于访问,修改注册表等的API,我们可以使用诸如bat,或者C++等各种方式去访问修改注册表.无所不能的python下如何完成这些 ...

  4. 算法复习——莫队算法(bzoj1878)

    题目: Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的 ...

  5. hdu 2713

    #include<stdio.h> #include<string.h> int map[151000][2]; int max(int a,int b) {  return ...

  6. 1109 NOIP 模拟考试

    NOIP2016 模拟赛 ——那些年,我们学过的文化课 背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, ...

  7. form:form的一点体会

    留个日程吧,明个写,下班了>>

  8. hdu 4965 矩阵快速幂 矩阵相乘性质

    Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Jav ...

  9. R语言入门视频笔记--9--随机与数据描述分析

    古典概型的样本总量是一定的,且每种可能的可能性是相同的, 1.中位数:median(x) 2.百分位数:quantile(x)或者quantile(x,probe=seq(0,1,0.2)) #后面这 ...

  10. Java 并发编程中的 CyclicBarrier 用于一组线程互相等待

    Java 5 引入的 Concurrent 并发库软件包中的 CyclicBarrier 是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) ...