.h声明文件

  1. // Integer.h
  2. // 02-MRC
  3. //
  4. // Created by ma c on 15/8/13.
  5. // Copyright (c) 2015年. All rights reserved.
  6. //
  7.  
  8. #import <Foundation/Foundation.h>
  9.  
  10. @interface Integer : NSObject
  11. @property(nonatomic,assign)NSInteger i;
  12. -(id)initWithI:(NSInteger) i;
  13. -(void) print;
  14. +(Integer *)integerWithIntger:(NSInteger) i;
  15. @end

  .m实现文件

  1. // Integer.m
  2. // 02-MRC
  3. //
  4. // Created by ma c on 15/8/13.
  5. // Copyright (c) 2015年. All rights reserved.
  6. //
  7.  
  8. #import "Integer.h"
  9.  
  10. @implementation Integer
  11. -(id)initWithI:(NSInteger) i
  12. {
  13. self = [super init];
  14. if(self)
  15. {
  16. _i = i;
  17. }
  18. return self;
  19. }
  20. +(Integer *)integerWithIntger:(NSInteger) i
  21. {
  22. return [[Integer alloc]initWithI:i];
  23. }
  24.  
  25. -(void) print
  26. {
  27. NSLog(@"i = %ld",_i);
  28. }
  29. -(void)dealloc
  30. {
  31. NSLog(@"integer dealloc");
  32. [super dealloc];
  33. }
  34. @end

 

   主函数测试

  1. // main.m
  2. // 02-MRC
  3. //
  4. // Created by ma c on 15/8/13.
  5. // Copyright (c) 2015年. All rights reserved.
  6. //
  7.  
  8. #import <Foundation/Foundation.h>
  9. #import "Integer.h"
  10. int main(int argc, const char * argv[])
  11. {
  12. @autoreleasepool
  13. {
  14. //测试手动引用计数
  15. //1.创建对象会获得对象所有权
  16. Integer *i1 = [[Integer alloc]initWithI:];
  17. NSLog(@"retaincount = %lu",[i1 retainCount]);//1
  18.  
  19. //2.只通过指针赋值,不会获得对象所有权
  20. Integer *i2 = i1;
  21. NSLog(@"retaincount = %lu",[i2 retainCount]);//1
  22.  
  23. //3.通过retain会获得对象的所有权
  24. [i1 retain];
  25. NSLog(@"retaincount = %lu",[i1 retainCount]);//2
  26.  
  27. //4.将对象添加到容器中,容器中会存储对象的一个引用,会获得对象所有权
  28. NSMutableArray *array = [NSMutableArray array];
  29. [array addObject:i1];
  30. NSLog(@"retaincount = %lu",[i1 retainCount]);//3
  31.  
  32. //5.通过release释放对象的所有权
  33. [i1 release];
  34. NSLog(@"retaincount = %lu",[i1 retainCount]);//2
  35.  
  36. //6.从容器中删除对象,也会释放对象所有权
  37. [array removeObject:i1];
  38. NSLog(@"retaincount = %lu",[i1 retainCount]);//1
  39.  
  40. //7.最后再释放一次,对象才会被正常销毁
  41. [i1 release]; //此时,底层会调用dealloc方法 //
  42. }
  43. return ;
  44. }

    测试结果是:

  1. -- ::36.408 -MRC[:] retaincount =
  2. -- ::36.409 -MRC[:] retaincount =
  3. -- ::36.410 -MRC[:] retaincount =
  4. -- ::36.410 -MRC[:] retaincount =
  5. -- ::36.410 -MRC[:] retaincount =
  6. -- ::36.410 -MRC[:] retaincount =
  7. -- ::36.410 -MRC[:] integer dealloc
  8. Program ended with exit code:

Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)的更多相关文章

  1. Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)

    引用计数和字符串 内存中的常量字符串的空间分配与其他对象不同,他们没有引用计数机制 凡是自定义的对象都有引用计数机制: OC内部中对象分为可变对象(NSMutableString等)和不可变对象(NS ...

  2. OC语法6——内存管理之引用计数器(retain,release)

    OC内存管理: 一.引用计数器: Java有垃圾回收机制(Garbage Collection,GC).也就是说当我们创建对象后,不需要考虑回收内存的事,Java的垃圾回收机制会自动销毁该对象,回收它 ...

  3. Objective-C:MRC手动释放对象内存举例(引用计数器)

    手机内存下的类的设计练习: 设计Book类, 1.三个成员变量:    title(书名)author(作者).price(价格) 2.不使用@property,自己完成存取方法(set方法,get方 ...

  4. iOS内存管理系列之一:对象所有权与引用计数

    当一个所有者(owner,其本身可以是任何一个Objective-C对象)做了以下某个动作时,它拥有对一个对象的所有权(ownership): 1. 创建一个对象.包括使用任何名称中包含“alloc” ...

  5. C语言的引用计数与对象树

    引用计数与对象树 cheungmine 2013-12-28 0 引言 我们经常在C语言中,用指针指向一个对象(Object)的结构,也称为句柄(Handle),利用不透明指针的技术把结构数据封装成对 ...

  6. OC-内存管理-基本原理与引用计数器

    基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...

  7. iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象

    1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...

  8. Unity 游戏框架搭建 (二十二) 简易引用计数器

    引用计数是一个很好用的技术概念,不要被这个名字吓到了.首先来讲讲引用计数是干嘛的. 引用计数使用场景 有一间黑色的屋子,里边有一盏灯.当第一个人进屋的时候灯会打开,之后的人进来则不用再次打开了,因为已 ...

  9. Linux内核引用计数器kref结构

    1.前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数.引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时 ...

随机推荐

  1. CentOS 升级Python3.X和pip3

    目的:实现python3 and python2 共存,pip2 and pip3共存 一.安装依赖 yum install openssl-devel -y yum install zlib-dev ...

  2. react-native第一次开发记录

    1.安装指定版本 react-native init demo --verbose --version 0.41.0 2.更新依赖包 npm install -g npm-check-updates ...

  3. 【知了堂学习笔记】java 接口与抽象类

    本次主角:抽象类 .接口. 对于皮皮潇这样一类的Java初学者来说,接口和抽象类如果不去花大量的精力与时间是很难弄清楚的,而我也是在最近这周的项目学习中感觉到了我对这两个概念不熟悉,所以导致对一些问题 ...

  4. Oracle数据库多表查询,子查询,集合运算

    记得自己要敲o~~~ select * from bonus; select * from salgrade; from dual; --笛卡尔积:两张表的乘积 select * from emp,d ...

  5. [leetcode tree]101. Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  6. BlocksKit(2)-DynamicDelegate

    BlocksKit(2)-DynamicDelegate 动态代理可以说是这个Block里面最精彩的一部分了,可以通过自己给一个类的的协议方法指定对应的block来实现让这个协议的回调都直接在bloc ...

  7. java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx

    从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObject cannot be cast to xxx, 使用这种方式接收可以接收 @R ...

  8. bzoj 2466 异或方程组

    对于每个灯,我们用一个变量表示其决策,xu=0表示不选,xu=1表示选.因为每个灯最后必须都亮,所以每个等都对应一个异或方程. 解这个异或方程组,有几种情况: 1.存在唯一解(得到的上三角系数矩阵的主 ...

  9. Python168的学习笔记4

    关于普通文本文件的读写 python2.7中,未注明的字符都是以acsii来编码的,而要让字符能够通用,必须声明为unicode. s=u'你好',s.encode('utf8')就是指用utf8来进 ...

  10. Codeforces Round #357 (Div. 2) C. Heap Operations 模拟

    C. Heap Operations 题目连接: http://www.codeforces.com/contest/681/problem/C Description Petya has recen ...