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

手机内存下的类的设计练习:

设计Book类,
1.三个成员变量:
   title(书名)author(作者)、price(价格)
2.不使用@property,自己完成存取方法(set方法,get方法)
3、加入必要其他的方法
4、并对Book类进行测试
 
    .h声明文件
 1 //  Book.h
 2 //  引用计数器
 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 Book : NSObject
11 {
12     NSString *_title;
13     NSString *_author;
14     CGFloat _price;
15 }
16 -(id)initWithTitle:(NSString*)title andAuthor:(NSString*)author
17             AndPrice:(CGFloat)price;
18 -(void)setTitle:(NSString*) title;
19 -(void)setAuthor:(NSString*) author;
20 -(void)setPrice:(CGFloat) price;
21 -(NSString*) title;
22 -(NSString*) author;
23 -(CGFloat) price;
24 -(void) show;
25 @end

      .m声明文件

 1 //  Book.m
 2 //  引用计数器
 3 //
 4 //  Created by ma c on 15/8/13.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7 
 8 #import "Book.h"
 9 
10 @implementation Book
11 -(id)initWithTitle:(NSString*)title andAuthor:(NSString*)author
12             AndPrice:(CGFloat)price
13 {
14     self = [super init];
15     if(self)
16     {
17         _title = [title retain];
18         _author = [author retain];
19         _price = price;
20     }
21     return self;
22 }
23 -(void)setTitle:(NSString*) title
24 {
25     if(_title != title)
26     {
27       [_title release];//释放上一次拥有的对象所有权
28       _title = [title retain];//获取这一次的对象所有权
29     }
30 }
31 -(void)setAuthor:(NSString*) author
32 {
33     if(_author != author)
34     {
35       [_author release];//释放上一次拥有的对象所有权
36       _author = [author retain];//获取这一次的对象所有权
37     }
38 }
39 -(void)setPrice:(CGFloat) price
40 {
41     _price = price;
42 }
43 -(NSString*) title
44 {
45     return _title;
46 }
47 -(NSString*) author
48 {
49     return _author;
50 }
51 -(CGFloat) price
52 {
53     return _price;
54 }
55 -(void) show
56 {
57     NSLog(@"title:%@,author:%@,price:%.2f",_title,_author,_price);
58 }
59 -(void)dealloc
60 {
61     [_title release];
62     [_author release];
63     NSLog(@"title retainCount:0");
64     NSLog(@"author retainCount:0");
65     NSLog(@"book retainCount:0");
66     NSLog(@"book is dealloc!");
67     [super dealloc];
68 }
69 @end

 

       测试Book类

 1 //  main.m
 2 //  引用计数器
 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 "Book.h"
10 int main(int argc, const char * argv[])
11 {
12     //@autoreleasepool {
13         
14         //创建书对象book并初始化
15         Book *book = [[Book alloc]initWithTitle:@"OC" andAuthor:@"Jobs" AndPrice:35.6];//book count:1
16         NSLog(@"book retainCount:%lu",[book retainCount]);
17         
18         //创建书名对象title
19         NSMutableString *title = [NSMutableString stringWithString:@"IOS"];//title count:1
20         NSLog(@"title retainCount:%lu",[title retainCount]);
21         
22         //设置书名
23         [book setTitle: title];//title count:2
24         NSLog(@"title retainCount:%lu",[title retainCount]);
25         
26         //创建书的作者对象author
27         NSMutableString *author = [NSMutableString stringWithString:@"Bill"];//author count:1
28         NSLog(@"author retainCount:%lu",[author retainCount]);
29         
30         //设置书的作者名
31         [book setAuthor:author];//author count:2
32         NSLog(@"author retainCount:%lu",[author retainCount]);
33         
34         
35         //设置书的价格
36         [book setPrice:58.9];
37         
38         
39         //释放title对象所有权----与上面的创建title对象相对应
40         [title release];//title count:1
41         NSLog(@"title retainCount:%lu",[title retainCount]);
42         
43         //释放author对象所有权----与上面的创建author对象相对应
44         [author release];//author count:1
45         NSLog(@"author retainCount:%lu",[author retainCount]);
46         
47         
48         //释放在book类中的成员实例变量title和author对象的所有权,并销毁book对象
49         [book show];
50         [book release];//title count:0, author count:0 ,book count:0, dealloc book
51     //}
52     return 0;
53 }

 

    运行结果:

2015-08-13 16:56:49.608 引用计数器[1527:94167] book retainCount:1
2015-08-13 16:56:49.609 引用计数器[1527:94167] title retainCount:1
2015-08-13 16:56:49.610 引用计数器[1527:94167] title retainCount:2
2015-08-13 16:56:49.610 引用计数器[1527:94167] author retainCount:1
2015-08-13 16:56:49.610 引用计数器[1527:94167] author retainCount:2
2015-08-13 16:56:49.610 引用计数器[1527:94167] title retainCount:1
2015-08-13 16:56:49.610 引用计数器[1527:94167] author retainCount:1
2015-08-13 16:56:49.610 引用计数器[1527:94167] title:IOS,author:Bill,price:58.90
2015-08-13 16:56:49.611 引用计数器[1527:94167] title retainCount:0
2015-08-13 16:56:49.611 引用计数器[1527:94167] author retainCount:0
2015-08-13 16:56:49.611 引用计数器[1527:94167] book retainCount:0
2015-08-13 16:56:49.611 引用计数器[1527:94167] book is dealloc!
Program ended with exit code: 0

 

可以看出:

     计数器:retainCount
     对象中存储被引用的次数,
     当被引用的时候,计数器加1;
     不在引用的时候,计数器减1;
     当计数器为0的时候,真正去销毁对象。

转载于:https://www.cnblogs.com/XYQ-208910/p/4727911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值