.h声明文件

 //  Integer.h
// 02-MRC
//
// Created by ma c on 15/8/13.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @interface Integer : NSObject
@property(nonatomic,assign)NSInteger i;
-(id)initWithI:(NSInteger) i;
-(void) print;
+(Integer *)integerWithIntger:(NSInteger) i;
@end

  .m实现文件

 //  Integer.m
// 02-MRC
//
// Created by ma c on 15/8/13.
// Copyright (c) 2015年. All rights reserved.
// #import "Integer.h" @implementation Integer
-(id)initWithI:(NSInteger) i
{
self = [super init];
if(self)
{
_i = i;
}
return self;
}
+(Integer *)integerWithIntger:(NSInteger) i
{
return [[Integer alloc]initWithI:i];
} -(void) print
{
NSLog(@"i = %ld",_i);
}
-(void)dealloc
{
NSLog(@"integer dealloc");
[super dealloc];
}
@end

 

   主函数测试

 //  main.m
// 02-MRC
//
// Created by ma c on 15/8/13.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Integer.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//测试手动引用计数
//1.创建对象会获得对象所有权
Integer *i1 = [[Integer alloc]initWithI:];
NSLog(@"retaincount = %lu",[i1 retainCount]);//1 //2.只通过指针赋值,不会获得对象所有权
Integer *i2 = i1;
NSLog(@"retaincount = %lu",[i2 retainCount]);//1 //3.通过retain会获得对象的所有权
[i1 retain];
NSLog(@"retaincount = %lu",[i1 retainCount]);//2 //4.将对象添加到容器中,容器中会存储对象的一个引用,会获得对象所有权
NSMutableArray *array = [NSMutableArray array];
[array addObject:i1];
NSLog(@"retaincount = %lu",[i1 retainCount]);//3 //5.通过release释放对象的所有权
[i1 release];
NSLog(@"retaincount = %lu",[i1 retainCount]);//2 //6.从容器中删除对象,也会释放对象所有权
[array removeObject:i1];
NSLog(@"retaincount = %lu",[i1 retainCount]);//1 //7.最后再释放一次,对象才会被正常销毁
[i1 release]; //此时,底层会调用dealloc方法 //
}
return ;
}

    测试结果是:

-- ::36.408 -MRC[:] retaincount =
-- ::36.409 -MRC[:] retaincount =
-- ::36.410 -MRC[:] retaincount =
-- ::36.410 -MRC[:] retaincount =
-- ::36.410 -MRC[:] retaincount =
-- ::36.410 -MRC[:] retaincount =
-- ::36.410 -MRC[:] integer dealloc
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. C语言可变参数个数

    #include <stdio.h>#include <stdarg.h> void test(const char * format, ...); int main(void ...

  2. kylin加载hive表错误:ERROR [http-bio-7070-exec-10] controller.TableController:189 : org/apache/hadoop/hive/conf/HiveConf java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法

    一.问题背景 在kylin中加载hive表时,弹出提示框,内容是“oops!org/apache/hadoop/hive/conf/HiveConf”,无法加载hive表,查找kylin的日志时发现, ...

  3. Android中selector背景选择器

    http://blog.csdn.net/forsta/article/details/26148403 http://blog.csdn.net/wswqiang/article/details/6 ...

  4. (三)宏 __cplusplus C/C++混合编程

    前面一些篇目的内容作为一个在校生,很少用到,可能工作的人会见得多一点,但是第一次整体性的学习还是不希望有落下的东西,虽然不常用但至少要有个印象 那么就进入第三篇<宏 __cplusplus> ...

  5. 标准c库函数与Linux下系统函数库 区别 (即带不带缓冲区的学习)

    我们都知道,C语言在UNIX/Linux系统下有一套系统调用(系统函数),比如文件操作open().close().write().read()等,而标准C语言的库函数中也有一套对文件的操作函数fop ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  7. 转Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  8. 机器学习之路:python线性回归分类器 LogisticRegression SGDClassifier 进行良恶性肿瘤分类预测

    使用python3 学习了线性回归的api 分别使用逻辑斯蒂回归  和   随机参数估计回归 对良恶性肿瘤进行预测 我把数据集下载到了本地,可以来我的git下载源代码和数据集:https://gith ...

  9. BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set

    https://www.lydsy.com/JudgeOnline/problem.php?id=2333 需要两个结构分别维护每个连通块的最大值和所有连通块最大值中的最大值,可以用两个可并堆实现,也 ...

  10. BZOJ 2466 [中山市选2009]树(高斯消元)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2466 [题目大意] 给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了, ...