黑马程序员—IOS加强视频—循环引用实例
2015-08-22 18:01
549 查看
6、 设计3个类,人、书、学生,类之间的关系(必须用到继承、组合)(Objective-C)
1> 人
(1)属性
* 姓名
* 年龄
2> 书
(1)属性
* 书名
* 出版社名称
* 作者(包含姓名和年龄)
3> 学生
* 姓名
* 年龄
* 学号
* 书(随身带着一本书)
MRC方式 有循环引用的问题!所以以人作为retain对象进行内存管理,防止出现野指针和内存泄露问题
1 人
1)人类方法的申明:
Person.h文件
#import<Foundation/Foundation.h>
@interface Person:NSObject
@proprety(nonatomic,retain)NSString *name;//姓名
@proprety (nonatomic,assgin)int age;//年龄
@end
2人类方法的实现
Person.m文件
#import"Person.h"
@implementation Person
//销毁实现手动管理
-(void)dealloc
{
[_name release];
NSLog(@"Person dealloc");
[super dealloc];
}
@end
2书
1书类方法的申明
#import<Foundation/Foundation.h>
@class Person
@interface Book:NSObject
@proprety(nonatomic,retain)NSString *title;
@proprety(nonatomic,retain)NSString *pressName;
@proprety(nonatomic,assgin)Person *author;//作者
@end
2书类方法的实现
#import"Book.h"
#import"Person.h"
@implementation Book
-(void)dealloc
{
[_title release];
[_pressName release];
[_author release];
NSLog(@"Book dealloc");
[super dealloc];
}
@end
3学生 继承人类
1学生类方法的声明
Student.h文件
#import"Person.h"
@class Book.h
@interface Student:Person
@proprety (nonatomic,assgin) int sno;
@proprety (nonatomic,retain) Book *book;//人拥有一本书
@end
2学生类方法的实现
Student.m文件
#import"Student.h"
#import"Book.h"
@implementation Student
-(void)dealloc
{
[_book release];
NSLog(@"Student dealloc");
[super dealloc];
}
@end
4 main函数
int main(int argc,const char *argv[]){
@autoreleasepool{
Person *p=[Person new];
//p.retainCount=1
Book *b=[Book new];
//b.retainCount=1
Student *s=[Student new];
//s.retainCount=1
b.author=p;
//p.retainCount=1
s.book=b;
//b.retainCount=2
[b release];
//b.retainCount=1
[s release];
//b.retainCount=0,s.retainCount=0
[p release];
//p.retainCount=0
}
return 0;
}
1> 人
(1)属性
* 姓名
* 年龄
2> 书
(1)属性
* 书名
* 出版社名称
* 作者(包含姓名和年龄)
3> 学生
* 姓名
* 年龄
* 学号
* 书(随身带着一本书)
MRC方式 有循环引用的问题!所以以人作为retain对象进行内存管理,防止出现野指针和内存泄露问题
1 人
1)人类方法的申明:
Person.h文件
#import<Foundation/Foundation.h>
@interface Person:NSObject
@proprety(nonatomic,retain)NSString *name;//姓名
@proprety (nonatomic,assgin)int age;//年龄
@end
2人类方法的实现
Person.m文件
#import"Person.h"
@implementation Person
//销毁实现手动管理
-(void)dealloc
{
[_name release];
NSLog(@"Person dealloc");
[super dealloc];
}
@end
2书
1书类方法的申明
#import<Foundation/Foundation.h>
@class Person
@interface Book:NSObject
@proprety(nonatomic,retain)NSString *title;
@proprety(nonatomic,retain)NSString *pressName;
@proprety(nonatomic,assgin)Person *author;//作者
@end
2书类方法的实现
#import"Book.h"
#import"Person.h"
@implementation Book
-(void)dealloc
{
[_title release];
[_pressName release];
[_author release];
NSLog(@"Book dealloc");
[super dealloc];
}
@end
3学生 继承人类
1学生类方法的声明
Student.h文件
#import"Person.h"
@class Book.h
@interface Student:Person
@proprety (nonatomic,assgin) int sno;
@proprety (nonatomic,retain) Book *book;//人拥有一本书
@end
2学生类方法的实现
Student.m文件
#import"Student.h"
#import"Book.h"
@implementation Student
-(void)dealloc
{
[_book release];
NSLog(@"Student dealloc");
[super dealloc];
}
@end
4 main函数
int main(int argc,const char *argv[]){
@autoreleasepool{
Person *p=[Person new];
//p.retainCount=1
Book *b=[Book new];
//b.retainCount=1
Student *s=[Student new];
//s.retainCount=1
b.author=p;
//p.retainCount=1
s.book=b;
//b.retainCount=2
[b release];
//b.retainCount=1
[s release];
//b.retainCount=0,s.retainCount=0
[p release];
//p.retainCount=0
}
return 0;
}
相关文章推荐
- 黑马程序员-[OC]学习之旅-(多态和方法响应检测)
- 黑马程序员----JavaSE一些常用基础知识点记录-学习日记
- 一道hive面试题
- 黑马程序员09多线程
- 面试精选逻辑推理题总结
- 黑马程序员08集合概述
- 动态链接的一点小总结 《程序员的自我修养》·笔记
- 程序员必读书单
- 2014——我的求职(两)
- 剑指offer面试题12-打印1到最大的n位数
- 黑马程序员-[OC]学习之旅-封装、继承
- 剑指offer面试题13-在O(1)时间删除链表的节点
- 三年程序员的实战开发经验之谈-做人做事建议
- 黑马程序员—————Java基础--------集合
- 程序员开发工作之算法和架构
- 黑马程序员——java基础—IO流(二)
- 程序员保值的五个关键点
- 网易前端面试总结
- Java程序员常用工具集
- 黑马程序员-java-多线程2