`
luckliu521
  • 浏览: 261418 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

object-c:property,assign,copy,retain,release区别

 
阅读更多
例子:
@property(nonatomic,retain) NSString *aString;

property:属性的定义,相当于C语言的setter和getter方法。
assign:简单的赋值,不更改索引的计数。
copy:建议一个索引计数为1的对象,然后释放旧对象;
retain:释放旧对象,将旧对象的值赋予新对象,再增加新对象的索引计数1。

针对具体的数据类型在属性定义应该这样选择:
使用assign:对基础的数据类型,比如NSInterger,CGFloat和C数据类型(int,float,double,char等等)。
使用copy:针对NSString;
使用retain:针对NSObject及其子类。
使用nonatomic:单线程,防止在写未完成的时候被另外一个线程读取,造成数据读取出错。
使用release:基于一般的初始化,使用alloc和init关键词初始化的,要在恰当的地方release掉,全局变量在dealloc方法里面release,常规变量在不需要的时候就要释放掉。
分享到:
评论

相关推荐

    ios object-c 面试试题 及答案

    了解`retain`、`release`、`autorelease`等概念,以及`strong`、`weak`、`unowned`等属性关键字在ARC下的作用也很重要。 7. **#import与#include的区别**: `#import`是Objective-C特有的,提供了头文件的互锁机制...

    ios开发ios基础开发面试题.txt

    在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...

    举例讲解Objective-C中@property属性的用法

    然而,Objective-C的`@property` 不仅仅涉及访问权限,它还涉及到自动合成(synthesis)和内存管理(例如,`copy`、`retain` 和 `assign`)。 在标题中提到的示例中,我们看到即使在Objective-C中声明了`@public`,...

    北风网内部版Objective-C培训资料

    id shallowCopy = [object copy]; id deepCopy = [object mutableCopy]; ``` #### 十三、归档 Objective-C提供了归档功能,可以将对象序列化为数据流或文件,以便于保存和恢复对象的状态。 ```objective-c NSData *...

    Objectiov-c考试题

    7. **内存管理原则**:Objective-C遵循“谁创建,谁负责”的内存管理原则,即谁调用`alloc`/`new`/`copy`/`retain`,谁就要负责调用`release`/`autorelease`。 8. **引用计数**:`retainCount`表示对象的引用计数,...

    iOS笔试题

    - 当使用 `@property` 的 `retain` 或 `copy` 修饰符时,需手动 `release` 不再使用的属性。 #### 八、线程创建与调度 **Objective-C 中创建线程的方法**: 1. **`NSThread`**:直接创建并启动线程。 2. **`...

    2018iOS一份高级面试题

    ### 面试题96:如何理解 Autorelease、retain、copy 和 assign? 1. **Autorelease**:将对象放入自动释放池,等待合适时机释放。 2. **Retain**:增加对象引用计数,保持对象不被销毁。 3. **Copy**:创建对象的深...

    iOS笔试题-77道(含答案)

    本文主要探讨了iOS开发中的一些常见笔试题目,涵盖了Objective-C语言特性、内存管理、视图生命周期、数据操作以及指针操作等多个方面。下面我们将逐一解析这些知识点。 1. `#import`与`#include`的区别: - `#...

    iOS 常见面试题

    11. **属性的retain、copy、assign**:`retain`保留所有权,`copy`创建对象副本,`assign`简单赋值。转换为get/set方法需注意内存管理规则。 12. **委托模式**:一种设计模式,通过代理对象传递消息,通常用`...

    iPhone常见面试题

    在Objective-C中,`self.name`会触发属性的setter方法,通常涉及到`retain`或`copy`操作,而`name`直接赋值仅适用于非属性变量。使用`self`可以确保属性的正确管理,特别是在多线程环境中。 #### 7. 属性修饰符的...

Global site tag (gtag.js) - Google Analytics