.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:

最新文章

  1. Delphi 各版本新特性功能网址收集
  2. laravel安装学习步骤
  3. go语言 类型:数组
  4. Android代码混淆官方实现方法
  5. [css filter]filter在界面实现滤镜效果
  6. C#DataGridView 美化
  7. disabled
  8. [Android代码阅读]分类简介
  9. JSON lib 里JsonConfig详解
  10. c# socket传输struct类型
  11. linux 下 启动oracle
  12. python核心编写视频笔记--模块的导入
  13. android最火的开源项目
  14. jQuery匿名函数$(function(){ }
  15. [z]protobuf实现c++与java之间的数据传递,beancopy数据到前台
  16. 并发编程 —— ConcurrentHashMap size 方法原理分析
  17. linux下nginx配置ssl证书(https)
  18. ios 点击Home问题
  19. Workflow_工作流的基本元素(概念)
  20. Sublime Text2安装Package Control

热门文章

  1. thinkphp3.2路由美化,url简化
  2. Think PHP 3.2 界面及JS多语言实现
  3. Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
  4. [leetcode sort]179. Largest Number
  5. windows下thrift的使用(C++)
  6. Form与ModelForm-下拉框或者多选注意//及字段补充
  7. Sublime Text 下的Install Package安装方法
  8. zip函数实际应用
  9. MyBatis之MyBatis环境搭建
  10. [POI2015]Myjnie