zoukankan      html  css  js  c++  java
  • OC基础:内存(进阶):retain.copy.assign的实现原理 分类: ios学习 OC 2015-06-26 17:36 58人阅读 评论(0) 收藏

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

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

  • 相关阅读:
    iOS 字典实现原理
    IOS中armv7,armv7s,arm64以及i386和x86_64讲解
    SDWebImage源码解析
    iOS Runtime的消息转发机制
    二叉树的遍历
    LINUX 常用命令 ps 详解
    LINUX 文件权限详解
    LINUX查看内存使用情况 free
    PHP isset() empty() isnull() 的区别
    PHP unset()函数销毁变量 但没有实现释放内存
  • 原文地址:https://www.cnblogs.com/shaoting/p/4619812.html
Copyright © 2011-2022 走看看