原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢?
assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。
Retain vs. Copy!!
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?
Copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0×1111,内容为@”STR”
Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化
retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…
分享到:
相关推荐
Object-C(Objective-C)是苹果公司基于C语言开发的一种面向对象的编程语言,主要用于iOS和macOS平台的应用程序开发。它在C语言的基础上添加了Smalltalk风格的消息传递机制,使得面向对象编程更加灵活。本教程将帮助...
在iOS开发中,Objective-C是主要的编程语言之一,面试中常常会涉及到一系列技术问题,以下是一些关于Objective-C的面试知识点和解答: 1. **main.m中的过程**: `main.m`是iOS应用程序的入口点。在这个文件中,`...
在实际开发中,理解和熟练掌握Object-C的内存管理规则至关重要,这不仅能提高程序的稳定性和性能,还能避免因内存问题导致的程序崩溃。遵循上述原则和技巧,开发者可以编写出高效、健壮的iPhone应用。
9. **属性设置**:题目10至12讨论了`assign`、`retain`和`copy`属性关键字的使用,理解其对内存管理的影响是必要的。 10. **self与super的使用**:`self`代表当前对象,`super`用于调用父类的方法。 11. **dealloc...
17. **assign、retain和copy的区别**:assign仅赋值,不改变引用计数;retain增加引用计数;copy执行深拷贝,创建对象的副本。 18. **数据持久化**:常用的数据持久化方式包括NSUserDefaults(轻量级数据)、Plist...
为了管理内存,Objective-C提供了几个关键方法:retain、copy和release。当创建对象后,开发者必须在适当的时候调用release方法来减少引用计数,直至其为0,这时对象占用的内存才会被真正释放。为了避免因重复释放...
标题和描述均指向了“iPhone开发011-ObjectiveC(详)”这一主题,这表明文档旨在深入探讨Objective-C在iOS开发中的应用。Objective-C是一种通用、面向对象的编程语言,由C语言演变而来,是早期iOS开发的主要语言。...
属性提供了自动内存管理(如retain、copy、nonatomic等特性),以及getter和setter方法的自动合成。 5. **协议(Protocols)**:Objective-C的协议类似于接口,定义了一组方法签名。遵循协议的类必须实现这些方法。...
Objective-C是一种面向对象的编程语言,它是在C语言的基础上发展起来的,主要用于开发iOS和Mac OS X应用。Objective-C结合了C语言的灵活性与Smalltalk的面向对象特性,使得开发者能够高效地构建复杂的应用程序。 ##...
Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...
`@property`用于声明对象的属性,提供自动内存管理(如retain、copy、assign)和访问器方法。 3. **消息传递**:Objective-C的对象通过发送消息来执行操作。消息传递机制是Objective-C的关键特性,它使得代码更加...
标题和描述中提到的《Google Objective-C Style Guide 中文版》是一份面向开发者的编程风格指南,主要针对在MacOSX和iPhone上使用Objective-C语言进行开发的技术人员。该指南结合了苹果公司和Google的编程最佳实践,...
在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...
在Objective-C中,对象通过发送消息来执行操作,如 `[object performAction:]`。 类和对象: Objective-C中的所有事物都是对象。类是对象的蓝图,定义了对象的属性(ivar)和行为(方法)。通过`@interface`、`@...
`与`name = "object"`的区别:前者通过setter方法设置属性,会触发KVO(Key-Value Observing)和自动引用计数,后者直接赋值不涉及KVO和setter。 3. 关于`setAge:`代码的问题:在`setAge:`方法中,直接使用`self....
在iOS开发中,`objc_setAssociatedObject`是一个非常重要的API,它允许我们在运行时为对象添加关联对象。这个API在不扩展类或者使用KVC(Key-Value Coding)的情况下,提供了一种为对象添加额外属性的方式。这篇实战...
Objective-C中的nil代表空指针,YES和NO分别对应布尔值true和false。值得一提的是,Objective-C中的BOOL类型与C++中的不同,其中1为true,0为false,这与C++的非零即真有所不同。示例代码中展示了一个main函数的基本...
### 面试题96:如何理解 Autorelease、retain、copy 和 assign? 1. **Autorelease**:将对象放入自动释放池,等待合适时机释放。 2. **Retain**:增加对象引用计数,保持对象不被销毁。 3. **Copy**:创建对象的深...
本文主要探讨了iOS开发中的一些常见笔试题目,涵盖了Objective-C语言特性、内存管理、视图生命周期、数据操作以及指针操作等多个方面。下面我们将逐一解析这些知识点。 1. `#import`与`#include`的区别: - `#...