zoukankan      html  css  js  c++  java
  • OC中属性的内存管理

    在MRC模式下,我们建一个Person类的对象.h文件如下

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 @property (nonatomic, retain)NSString *name;
     5 @property (nonatomic, retain)NSString *sex;
     6 @property (nonatomic, assign)NSInteger age;
     7 //自定义初始化
     8 -(instancetype)initWithName:(NSString *)name Sex:(NSString *)sex Age:(NSInteger)age;
     9 //便利构造器
    10 
    11 +(instancetype)personWithName:(NSString *)name Sex:(NSString *)sex Age:(NSInteger)age;
    12 
    13 @end

    .m文件如下

    #import "Person.h"
    
    @implementation Person
    //在MRC下,如果需要同时重写setter和getter方法,必须下面的的语句
    @synthesize name = _name;
    //自定义初始化
    -(instancetype)initWithName:(NSString *)name Sex:(NSString *)sex Age:(NSInteger)age
    {
        if (self = [super init]) {
            _name = name;
            _sex = sex;
            _age = age;
        }
        return self;
    }
    //便利构造器
    
    +(instancetype)personWithName:(NSString *)name Sex:(NSString *)sex Age:(NSInteger)age
    {
        return [[[Person alloc] initWithName:name Sex:sex Age:age]autorelease];
    }
    //重写dealloc可以验证对象内存空间是否被收回,方式是否被调用
    -(void)dealloc
    {
        NSLog(@"这个对象被销毁");
        //以后只要在MRC中,重写dealloc方法,就需要一一对应为语义特征为retain或者copy的属性生成的实例变量release一次
        [self.name release];//针对sertter方法最后一次retain的release
        [_sex release];
        [super dealloc];
    }
    //MRC下,retain的内部实现 setter方法
    //-(void)setName:(NSString *)name
    //{
    //    if (_name != name) {
    //        [_name release];
    //        _name = [name retain];
    //    }
    //}
    //-(NSString *)name
    //{
    //    return [[_name retain]autorelease];
    //}
    -(void)setName:(NSString *)name
    {
        if (_name != name) {
            [_name release];
            _name = [name copy];
     
        }
    }
    -(NSString *)name
    {
        return [[_name retain]autorelease];
    }
    @end

    在MRC模式下,copy与retain的setter,getter方法写法一致,但是实现的机制不相同,前者是得到传入参数的副本,重新开辟空间,而后者是使引用计数加一

  • 相关阅读:
    使用Xposed+JustTrustMe来突破SSL Pinning
    反编译工具
    java练习生 使用feign
    java练习生 AOP【日志】【异常处理】
    java 中string类型转Date类型和Date类型转string类型
    Metro Style App 异步简洁而不简单的异步
    Metro Style app :浏览器扩展
    用async 解放你的大脑
    Metro Style App :推送概述(二)
    Metro Style App :Framwork与WinRT(二)
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5142874.html
Copyright © 2011-2022 走看看