Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)
// main.m
// 03-unmutableobject
//
// Created by ma c on 15/8/13.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
@autoreleasepool
{
//不可变对象不适用于引用计数
//1.创建3个对象
NSString *str1 = @"hello world";//不可变对象 NSString *str2 = [NSString stringWithString:@"how arer you"];//不可变对象 NSMutableString *str3 = [NSMutableString stringWithString:@"I am fine"];//可变对象 NSLog(@"str1 = %lu,str2 = %lu,str3 = %lu",[str1 retainCount],[str2 retainCount],[str3 retainCount]); //2.将3个对象添加到可变数组中
NSMutableArray *array = [NSMutableArray array];
[array addObject:str1];
[array addObject:str2];
[array addObject:str3];
NSLog(@"str1 = %lu,str2 = %lu,str3 = %lu",[str1 retainCount],[str2 retainCount],[str3 retainCount]); //3.对3个对象做retain操作
[str1 retain];
[str2 retain];
[str3 retain];
NSLog(@"str1 = %lu,str2 = %lu,str3 = %lu",[str1 retainCount],[str2 retainCount],[str3 retainCount]); //4.将3个对象从数组中删除
[array removeObject:str1];
[array removeObject:str2];
[array removeObject:str3];
NSLog(@"str1 = %lu,str2 = %lu,str3 = %lu",[str1 retainCount],[str2 retainCount],[str3 retainCount]); //5.对对象做release操作---对应上面的retain操作
[str1 release];
[str2 release];
[str3 release];
NSLog(@"str1 = %lu,str2 = %lu,str3 = %lu",[str1 retainCount],[str2 retainCount],[str3 retainCount]); //6.对对象做release操作---对应上面的对象创建操作(避免内存泄露)
[str1 release];
[str2 release];
[str3 release];
}
return ;
}
测试结果是:
-- ::26.569 -unmutableobject[:] str1 = ,str2 = ,str3 =
-- ::26.570 -unmutableobject[:] str1 = ,str2 = ,str3 =
-- ::26.571 -unmutableobject[:] str1 = ,str2 = ,str3 =
-- ::26.571 -unmutableobject[:] str1 = ,str2 = ,str3 =
-- ::26.571 -unmutableobject[:] str1 = ,str2 = ,str3 =
Program ended with exit code:
说明:可以明显看出,NSString是不适用引用计数机制的。
Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)的更多相关文章
- Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
.h声明文件 // Integer.h // 02-MRC // // Created by ma c on 15/8/13. // Copyright (c) 2015年. All rights r ...
- OC语法6——内存管理之引用计数器(retain,release)
OC内存管理: 一.引用计数器: Java有垃圾回收机制(Garbage Collection,GC).也就是说当我们创建对象后,不需要考虑回收内存的事,Java的垃圾回收机制会自动销毁该对象,回收它 ...
- Objective-C:MRC手动释放对象内存举例(引用计数器)
手机内存下的类的设计练习: 设计Book类, 1.三个成员变量: title(书名)author(作者).price(价格) 2.不使用@property,自己完成存取方法(set方法,get方 ...
- OC-内存管理-基本原理与引用计数器
基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...
- php 调试工具及学习PHP垃圾回收机制了解引用计数器的概念
php代码工具:Xdebug 与分析工具 WinCacheGrind Xdebug之函数大全: string xdebug_call_class()返回当前被调用的函数或方法所属的类的类名 stri ...
- Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向 ...
- 学习PHP垃圾回收机制了解引用计数器的概念
php变量存在一个叫"zval"的变量容器中,"zval"变量容器包括含变量的类型和值,还包括额外的两个字节信息,分别是“is_ref”表示变量是否属于引用,“ ...
- Unity 游戏框架搭建 (二十二) 简易引用计数器
引用计数是一个很好用的技术概念,不要被这个名字吓到了.首先来讲讲引用计数是干嘛的. 引用计数使用场景 有一间黑色的屋子,里边有一盏灯.当第一个人进屋的时候灯会打开,之后的人进来则不用再次打开了,因为已 ...
- php 内核变量 引用计数器写时复制
写时复制,是一个解决内存复用的方法,就是你在php语言层,如$d=$c=$b=$a='value';把$a赋给另一个或多个变量,这时这个变量都只占用一个内存块,当其中一个变量值改变时,才会开辟另一个内 ...
随机推荐
- css盒子垂直居中
首先父盒子包住子盒子 <body> <div class="outbox"> <div class="box"></d ...
- Dubbo中只订阅与只注册
一:只订阅 1.场景 为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行. 可以让服务提供者开发方,只订阅服务(开发的服 ...
- Python使用正则
Python中使用正则的两种方式 在Python中有两只能够使用正则表达式的方式: 直接使用re模块中的函数 import re re_string = "{{(.*?)}}" s ...
- sqlldr errors
sqlldr myUser/myPWD@myCONN control='d:/sqlload/new/test/loader1.ctl' errors=1000000
- Rob Pike:我得到的最佳编程建议
Rob Pike:我得到的最佳编程建议 Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领 ...
- nginx + uswgi +django
适合ubuntu 系统,不只是树莓派 安装必要软件 pt-get install build-essential psmisc apt-get install python-dev libxml2 l ...
- python中%r和%s的区别
%r用rper()方法处理对象 %s用str()方法处理对象 有些情况下,两者处理的结果是一样的,比如说处理int型对象. 例一: print "I am %d years old.&quo ...
- Sass 和 SCSS 有什么区别?
Sass 官网上是这样描述 Sass 的: Sass 是一门高于 CSS 的元语言,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法, ...
- ThinkPHP连接sqlserver,错误11001
错误代码如下: :( 11001:[Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: 不知道这样的主机. 0:[Microsoft][ODB ...
- [BZOJ4565][HAOI2016]字符合并(区间状压DP)
https://blog.csdn.net/xyz32768/article/details/81591955 首先区间DP和状压DP是比较明显的,设f[L][R][S]为将[L,R]这一段独立操作最 ...