码迷,mamicode.com
首页 > 其他好文 > 详细

OC基础:内存(进阶):retain.copy.assign的实现原理

时间:2015-06-27 10:05:15      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:oc   ios   

遍历构造器的内存管理
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

版权声明:本文为博主原创文章,未经博主允许不得转载。

OC基础:内存(进阶):retain.copy.assign的实现原理

标签:oc   ios   

原文地址:http://blog.csdn.net/shaoting19910730/article/details/46652419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!