OC基础:内存(进阶):retain.copy.assign的实现原理
2015-06-26 17:36
267 查看
遍历构造器的内存管理
a.遍历构造器方法内部使用autorelease释放对象
b.通过遍历构造器生成的对象.不用释放.
内存的管理总结
1.想占用某个对象的时候,要让它的引用计数器+1(retain操作)
2.当不想再占用某个对象的时候,要让它的引用计数器-1(release操作)
3.谁alloc谁release,遍历构造器使用autorelease
另:当一个属性遵循了协议的时候(该属性就是代理),这时使用内存组的assign修饰.
多态:父类指针 指向 子类对象
没有继承就没有多态
父类可以指向子类对象,这个时候会有局限性,就是父类不能调用子类的特有的方法.
———————具体的retain copy assign的内部实现———————
Person.h
Person.m
a.遍历构造器方法内部使用autorelease释放对象
b.通过遍历构造器生成的对象.不用释放.
内存的管理总结
1.想占用某个对象的时候,要让它的引用计数器+1(retain操作)
2.当不想再占用某个对象的时候,要让它的引用计数器-1(release操作)
3.谁alloc谁release,遍历构造器使用autorelease
另:当一个属性遵循了协议的时候(该属性就是代理),这时使用内存组的assign修饰.
多态:父类指针 指向 子类对象
没有继承就没有多态
父类可以指向子类对象,这个时候会有局限性,就是父类不能调用子类的特有的方法.
———————具体的retain copy assign的内部实现———————
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic,retain)NSString *name; @property (nonatomic,assign)NSInteger age; @property (nonatomic,copy)NSString *color; -(id)initWithName:(NSString *)name andAge:(NSInteger)age andColor:(NSString *)color; +(id)personWithName:(NSString *)name andAge:(NSInteger)age andColor:(NSString *)color; @end
Person.m
#import "Person.h" @implementation Person @synthesize name=_name,age=_age,color=_color; //retian -(void)setName:(NSString *)name{ if (_name!=name) { [_name release]; _name=[name retain]; } } -(NSString *)name{ return _name; } //assign -(void)setAge:(NSInteger)age{ _age=age; } -(NSInteger)age{ return _age; } //copy -(void)setColor:(NSString *)color{ if (_color!=color) { [_color release]; _color=[color retain]; } } -(NSString *)color{ return _color; } -(id)initWithName:(NSString *)name andAge:(NSInteger)age andColor:(NSString *)color{ self=[super init]; if (self) { _name=name; _age=age; _color=color; } return self; } +(id)personWithName:(NSString *)name andAge:(NSInteger)age andColor:(NSString *)color{ return [[Person alloc]initWithName:name andAge:age andColor:color]; } -(void)dealloc{ [_name release]; [_color release]; [super dealloc]; } @end
相关文章推荐
- ubuntu用不了root用户:~$ su - root Password: su: Authentication failure怎么办?
- HDU 3376 Matrix Again(最大费用最大流)HDU2686加强题
- 【从翻译mos文章】Weblogic AdminServer 启动fail,报错"unable to get file lock, will retry"
- [Selenium] Explicit wait 方法
- 70.Climbing Stairs
- aidl is missing
- rails 环境搭建常用指令
- Thumbnailator的简介和使用范例
- 解决负载均衡中遇到Failed to connect to 10.3.3.173 port 443: No route to host
- XCTest的waitForExpectationsWithTimeout 方法
- traineddata
- container_of()宏
- Train Problem I
- Train Problem I 分类: HDU 2015-06-26 11:27 10人阅读 评论(0) 收藏
- [LeetCode]Climbing Stairs
- Daikon Forge button制作
- crossdomain.xml的配置详解
- Fibonacci Again
- Fibonacci Again 分类: HDU 2015-06-26 11:05 13人阅读 评论(0) 收藏
- NVIDAI和ATI显卡比较,细研GPU工作流程