autorelease-关于oc引用计数的问题

问题描述

关于oc引用计数的问题

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)] autorelease];
returnLable = label;
NSLog(@"label = %d",returnLable.retainCount);//计数是1
[self.view addSubview:returnLable];
NSLog(@"label = %d",returnLable.retainCount);//计数是2

加一个按钮的点击事件后
{
NSLog(@"2/ label = %d",returnLable.retainCount);//计数是2
NSLog(@"3/ label = %d",returnLable.retainCount);//计数是2;
}
但是点击事件中改成
{
NSLog(@"2/ label = %d",returnLable.retainCount);//计数是2
[self.view addSubview:returnLable];
NSLog(@"3/ label = %d",returnLable.retainCount);//计数是1;
}

改变点击事件后为什么引用计数反而少了1?

解决方案

OC的内存管理 与 引用计数
OC中内存管理问题之引用计数
OC使用引用计数的内存管理

解决方案二:

是不是和你的自动释放池有关系?

时间: 2024-09-24 15:50:30

autorelease-关于oc引用计数的问题的相关文章

Objective-C中的引用计数

 导言 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数器.如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数.计数为0,就表示没人关注此对象了,于是,就可以把它销毁. 从Mac OS X 10.8开始,"垃圾收集器"(garbage collector)已经正式废弃了,以Objective-C代码编写Mac OS X程序时不应再使用它,而iOS则从未支持过垃圾收集.因此,掌握引用计数机制对于学好Objective-C来

obj-c编程11:内存管理和ARC(自动引用计数)

    乖乖隆地洞,这篇文章内容可是不得了,内存管理哦!首先,这个要是搞不明白,你就等着进程莫名其妙的挂死,或是疯狂申请内存却不释放,结果被OS杀死,不管是"自杀"还是"他杀",都不是那么好玩的哦.其次要记住这可不是windows 中的内存管理(Win32 api),也不是linux中C like的内存管理方法.这个比他们都"高级"的多啊!但是没有ruby的高级,也没有ruby的简单,如果mac编程用ruby的就好了,这不搞出一个雨燕(SWFIT

nsstring-NSString 引用计数 负1

问题描述 NSString 引用计数 负1 **_NSString *str = [[NSString alloc]init]; NSString *str7 = [[NSString alloc]initWithString:@"aaa"] //retainCount = -1 NSString *str8 = [[NSString alloc]initWithFormat:@"aaa"]; //retainCount = -1 NSString *str9 =

【iOS7的一些总结】1、ARC自动引用计数

对于软件开发而言,引用计数Reference Counting不是一个陌生的概念.在组件对象模型COM中,这就是一个非常重要的概念.每一个对象都维持着一个量称为"引用计数",标志着有多少"客户"程序在引用当前的对象.只要还有"客户"引用当前对象,也就是引用计数非零,那么这个对象将会保存在内存中不会消失:如果没有任何"客户"引用当前对象了,那引用计数将被设为0,此时该对象将会从内存中释放.通过这种机制可以防止已经废弃的对象继续存

iOS内存管理机制解析之MRC手动引用计数机制

前言: iOS的内存管理机制ARC和MRC是程序员参加面试基本必问的问题,也是考察一个iOS基本功是 否扎实的关键,这样深入理解内存管理机制的重要性就不言而喻了. iOS内存管理机制发展史 iOS 5以前 :MRC(手动引用计数) iOS 5及以后:ARC (自动引入计数) MRC机制时代 "谁开辟申请,谁及时合理释放" 面对自己申请的内存空间是要及时进行回收的: 不及时释放会造成什么结果? 对象存储在栈上,可能会大量的占用内存,内存不足造成程序闪退(也就是所说的内存泄露) 不合理释放

分布式Map中实现引用计数

前言 在<ReferenceCountSet无锁实现>中,详细介绍了如何在一个进程中实现一个无锁版本的ReferenceCountSet(或者说是在自己的代码里没有锁),但是最近遇到一个问题,如果是在分布式的环境中呢?如何实现这个引用计数?这个问题如果从头开始写,会是一个比较复杂的问题,在实际中,我们可以使用ZooKeeper设置时的version机制来实现,即CAS(Compare-And-Set).这是一个本人在实际项目中遇到的一个问题,但是会更简单一些,因为在我们的项目中,我们使用Gem

php引用计数与变量引用

每个php5.5变量都存储在一个叫做zval的变量容器中.   一个zval变量容器,除了包含变量的类型与值外,还包含两个字节的额外信息:   1.第一个是"is_ref",是个bool型,用来标识这个变量是否属于引用集合(reference set),若属于则其值为1,否则为0.   有个这个变量php引擎就能够将普通变量与引用变量区分开来.   2.第二个是"refcount",用来表示指向这个zval变量(符号)的个数.每个符号都有作用域(scope),那些主

reference counting:PHP源码分析-变量的引用计数、写时复制(Reference counting &amp;amp; Copy-on-Write)

PHP语法中有两种赋值方式:引用赋值.非引用赋值.<?php$a = 1;$b = $a; // 非引用赋值$c = &$b; // 引用赋值从表面看,通常会这样认为:"引用赋值就是两个变量对应同一个变量(在C中其实就是一个zval),非引用赋值则是直接产生的一个新的变量(zval),同时将值copy过来".这种认为在大部分情况下都是可以想通的.(#1)但有些情况下则会显得非常低效,例如:(#2)<?phpfunction print_arr($arr){//非引用

浅谈引用计数

浅谈引用计数前言 作为Delphi程序员,您可以不用看这节内容,但是如果您想更多的了解一些COM内部技术,或是在对象模型与引用模型之间可以进行很好的控制的话,笔者更希望你可以抽出些许时间来看这一切的内容,而益处提体的将很明显,您可以自由的用一些技巧来解决让您头疼的问题.好了,继续我们今天的交流: 在组件技术必备知识二中,我们对接口(Interface)进行了一些介绍,当我们并没有深入的对接口的实现/效率/优化等问题进行进一步的禅述,而了解它们的确对于我们以后的编程是有很大的帮助的,我们都知道,每