OC中内存管理 assign, retain, copy 的 setter 和 getter 方法

原创 2015年11月21日 20:04:16

最近关于 setter 和 getter 方法突然有些晕, 所以重新做了整理

内存管理 assign, retain, copy 的 setter 和 getter 方法

assign的 setter 和 getter 方法(用来定义简单数据类型)

@property (nonatomic, assign) NSString *name;

1. assign 的 setter 方法

- (void)setName:(NSString *)name {
    _name = name;
}

2. assign 的 getter 方法

- (NSString *)name {
    return _name;
}

retain的 setter 和 getter 方法( 一般用来定义有数据结构的类对象)

@property (nonatomic, retain) NSString *name;

1. retain 的 setter 方法

- (void)setName:(NSString *)name {
    if (_name != name) {
        //如果_name 原本指向的内存空间和 name 的内存空间不相同时, 在这里重新设置 _name 属性的值时, 需要将原来的空间释放掉, 再重新指向name 的内存空间.
        [_name release];
        _name = [name retain];
    }
}

2. retain 的 getter 方法

- (NSString *)name {
    return [[_name retain] autorelease];//getter 方法不会引起引用计数加 1
}

copy的 setter 和 getter 方法(一般用来设置 NSString)

@property (nonatomic, copy) NSString *name;

1. copy 的 setter 方法

- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name copy];//copy和 retain 的不同之处在于, copy 另外开辟一块空间, 而 retain 是在name 的内存空间上引用计数加 1
    }
}

2. copy 的 getter 方法

- (NSString *)name {
    return [[_name retain] autorelease];
}

dealloc方法的作用

为了解决在类对象释放时, 残留的类对象属性变量的内存空间没有被释放的问题, 所以在 dealloc 方法中需要先释放属性变量的内存空间.
在 ARC 中, 有系统对内存进行管理, 不用写 dealloc 方法.

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

OC中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy...
  • Damon_hoo
  • Damon_hoo
  • 2014年09月04日 17:43
  • 1096

探讨OC的内存管理 以及防止循环引用retain cycle 代理为什么用weak block为什么用copy

首先声明OC的内存管理机制:引用计数。当一个对象的引用计数为0时,这个对象就会被释放。铭记以上两点,我们开始来探讨。 换句话说,如果一个对象,没有强指针指向,就会被释放。举个很形象的例子,假如每一个对...
  • qinqi376990311
  • qinqi376990311
  • 2016年10月26日 15:17
  • 626

IOS开发 @property中assign、copy 、retain等关键字的理解

一、@property基本作用 @property(nonatomic,retain)NSString *str; @property关键字提供了外界对成员变量的访问接口,其本质是为某一个...
  • muzhenhua
  • muzhenhua
  • 2015年05月06日 13:07
  • 1161

IOS面试题--004

1、        简述你对UIView、UIWindow和CALayer的理解 UIView: 界面的元素 UIWindow:应用程序的窗口,通常跟屏幕一样大.呈现程序的全部内容 CALayer:m...
  • u013082522
  • u013082522
  • 2014年02月27日 21:29
  • 1164

iOS 面试题(一)

1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,rea...
  • zwp438123895
  • zwp438123895
  • 2014年06月21日 21:31
  • 349

javaBean Getter与Setter方法的内省调用

我们知道在进行javaEE开发的时候我们很多 的java对象都是按照一定的格式来进行书写如字段用私有并通过getter,setter方法来访问。这样的特殊的java对象就是javaBena。 se...
  • ydcun
  • ydcun
  • 2013年12月08日 14:16
  • 1478

Java的setter方法和getter方法的使用

java有三大特性:封装,继承还有多态。                   而今天,我来讲一下其中最重要的特性之一:封装。           首先,属性可用来描述同一类事物的特征,方法可描述一类事...
  • gdut_2012
  • gdut_2012
  • 2013年12月07日 21:47
  • 7983

JavaScript对象中属性的getter和setter方法

JavaScript对象的属性是由名字、值和一组特性(可写、可枚举、可配置等)构成的。在ECMAScript 5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter。var m...
  • u012510478
  • u012510478
  • 2017年01月10日 11:54
  • 1808

看不明白这篇你敢说懂setter/getter?

setter/getter是一个类最基本的东西,任何一门面向对象的语言,都有这个概念,C++、java等等。因为setter/getter是对面向对象语言封装的最基本的支持。OC中的setter/ge...
  • u012946824
  • u012946824
  • 2016年07月04日 16:42
  • 1049

关于OC中Copy和retain的心得

关于oc中的 @property中的retain和Copy的运用, 首先先看一下OC中的关于 * &之间的关系         NSString * str=@"123";         NS...
  • PassionWilliam
  • PassionWilliam
  • 2015年09月15日 13:05
  • 943
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC中内存管理 assign, retain, copy 的 setter 和 getter 方法
举报原因:
原因补充:

(最多只允许输入30个字)