博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object-c学习之路二(oc内存管理黄金法则1)
阅读量:5899 次
发布时间:2019-06-19

本文共 2829 字,大约阅读时间需要 9 分钟。

今天看了看oc的内存管理,自己管理内存不能随便的release和retain 法则会出现野指针等错误。下面以人和读书的例子做练习。

1.主函数

 

////  main.m//  MemoryManagement////  Created by WildCat on 13-7-23.//  Copyright (c) 2013年 wildcat. All rights reserved.//#import 
#import "Student.h"#import "Book.h"void test1(){ Student *stu=[[Student alloc] init]; [stu retain]; NSLog(@"stu 的计算器为:%zi",[stu retainCount]);//2 [stu release];//1 [stu release];//0 }#pragma mark 添加书void addBook(Student *stu){ Book *book=[[Book alloc] initWithPrice:3.5]; stu.book=book; [book release]; Book *book2=[[Book alloc] initWithPrice:4.5]; stu.book=book2; [book2 release];}#pragma mark 读书void readBooks(Student *stu){ [stu readBook];}#pragma mark 主函数int main(int argc, const char * argv[]){ @autoreleasepool { Student *stu=[[Student alloc] initWithAge:22]; Student *stu1=[[Student alloc] initWithAge:20]; addBook(stu1); readBooks(stu1); addBook(stu); readBooks(stu); [stu release];//多写[stu release]会出现野指针错误,[nil release]则不会 [stu1 release]; } return 0;}

 

2.Student函数

 

//  Student.h//  MemoryManagement////  Created by WildCat on 13-7-23.//  Copyright (c) 2013年 wildcat. All rights reserved.//#import 
#import "Book.h"@interface Student : NSObject{ int _age; Book *_book;}@property int age;@property Book *book;-(id)initWithAge:(int)age;-(void) readBook;@end

 

////  Student.m//  MemoryManagement////  Created by WildCat on 13-7-23.//  Copyright (c) 2013年 wildcat. All rights reserved.//#import "Student.h"@implementation Student@synthesize age=_age;-(Book *)getBook{    return _book;}-(void)setBook:(Book *)book{    if (_book!=book){        //先释放旧的        [_book release];        //再retain 新的        _book=[book retain];    }       }//重写dealloc方法,当对象的计数器是1时自动调用该方法#pragma mark - 静态方法#pragma mark 回收对象- (void)dealloc{    [_book release];    NSLog(@"Student %i,内存被释放。",_age);    [super dealloc];}#pragma mark - 公共方法#pragma mark 读书-(void)readBook{    NSLog(@"当前读的书为:%f",_book.price);}#pragma mark 构造函数-(id)initWithAge:(int)age{    if(self=[super init]){        _age=age;    }        return self;}@end

 

3.Book函数

 

//  Book.h//  MemoryManagement////  Created by WildCat on 13-7-23.//  Copyright (c) 2013年 wildcat. All rights reserved.//#import 
@interface Book : NSObject{ float _price;}@property float price;-(id) initWithPrice:(float)price;@end

 

//  Book.m//  MemoryManagement////  Created by WildCat on 13-7-23.//  Copyright (c) 2013年 wildcat. All rights reserved.//#import "Book.h"@implementation Book@synthesize price=_price;#pragma mark 注销函数-(void)dealloc{    NSLog(@"Book %f ,被销毁。",_price);    [super dealloc];}#pragma mark 构造函数-(id) initWithPrice:(float)price{      if (self=[super init]){       _price=price;    }    return self;}@end

 

你可能感兴趣的文章
全排列(Perm)的递归实现算法
查看>>
Mybatis(一)走进Mybatis与FisrtExample
查看>>
python numpy访问行列元素的方法
查看>>
C++中map用法详解《转》
查看>>
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>
Idea代码可视化插件
查看>>
MVC5+EF6 入门完整教程八
查看>>
sql server 无法用sql server身份验证
查看>>
Async和Await 异步方法
查看>>
python 的 json 转换
查看>>
HBase基准性能测试报告
查看>>
软件安装的list(0918)
查看>>
使用quicklz缩小程序体积
查看>>
Java 设计模式专栏
查看>>
在controller中无法通过注解@Value获取到配置文件中定义的值
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
用实例讲DynamicResource与StaticResource的区别
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>