assign,copy,retain的区别以及weak和strong的区别

@property (nonatomic, assign) NSString *title; 

 

什么是assign,copy,retain之间的区别? 

 

 

assign: 简单赋值,不更改索引计数(Reference Counting)。 

 

copy: 建立一个索引计数为1的对象,然后释放旧对象 

 

retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 

 

 

 

 

 

weak 和strong的区别:

 

 

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。

 

一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

 

可能有个例子形容是妥当的。

 

想象我们的对象是一条狗,狗想要跑掉(被释放)。

 

strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。

 

weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。

 

只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。

 

 

 

使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等) 

 

使用copy: 对NSString 

 

使用retain: 对其他NSObject和其子类 

 

nonatomic关键字: 

 

atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择

时间: 2024-08-31 07:30:41

assign,copy,retain的区别以及weak和strong的区别的相关文章

OC weak strong __weak __strong copy retain assign nonatomic atomic等关键字的总结

 weak和strong的区别:       weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它. 一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除. 可能有个例子形容是妥当的. 想象我们的对象是一条狗,狗想要跑掉(被释放). strong型指针就像是栓住的狗.只要你用牵绳挂住狗,狗就不会跑掉.如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,

atomic与nonatomic,assign copy与retain的区别

  atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全. 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic,setter函数会变成下面这样: {lock} f (property != newValue) { [property release]; property = [newValue retain]; } {unlock} non

ios-iOS遵循NSCopying协议采用的copy 和自己写的myCopy函数有什么区别?

问题描述 iOS遵循NSCopying协议采用的copy 和自己写的myCopy函数有什么区别? -(id)copyWithZone:(NSZone *)zone { Student * stu = [[Student allocWithZone:zone] init]; stu.name = self.name; stu.age = self.age; return stu; } -(id) myCopy { Student *stu = [Student new]; stu.name =se

CSS长度单位的区别 - pt,px和cm的区别

在CSS样式表中,我们经常会看到pt, px,em,ex ,in等这类长度单位.它们各是什么意思,有什么区别呢? 我又写了另外一个HTML例子,测试一下cm. 在CSS样式表中,长度单位分两种: 相对长度单位,如px, em等 绝对长度单位,如pt,mm等 也谈px和pt的区别 经常看 到有人拿px和pt比较,主要是为了争辩在确定字体大小(font-size)或其它CSS属性大小时,用什么样的CSS长度单位更加好.有人说,用pt更好,因为pt是绝对长度单位,不会因为屏幕分辨率大小,或者其它因素而

Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别_javascript技巧

前言 第一次听说jsonp,其实早在2年之前.当时在做一个活动页面的抽奖模块,要从服务端get一个概率,当时什么都不懂,同事说用ajax,我就用ajax,同事说dataType改成jsonp,我就改成jsonp.于是乎活动页面做完了,以后也没有碰到过jsonp,在这期间我一直以为jsonp跟ajax息息相关,是xhr的一种特殊的跨域形式...直到一个月前的一次面试,问到jsonp我被虐成狗,才决定看下jsonp,好吧,原来jsonp也不是很难. 为什么要用jsonp? 相信大家对跨域一定不陌生,

ThinkPHP中实例化对象M()和D()的区别,select和find的区别

原文:ThinkPHP中实例化对象M()和D()的区别,select和find的区别 1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名.D实例化的是你自己在Model文件夹下面建立的模型文件 例如:$user = new UserModel(); 等价于$user = D('user'); 如

【spring 区别】ClassXmlAplicationContext和FileSystemXmlApplicationContext的区别

今天写一个简单的spring使用例子,遇到这个问题: 项目结构如下:   代码如下: 1 package com.it.sxd; 2 3 import java.nio.file.FileSystem; 4 5 import org.junit.Test; 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.ClassPathXmlApplica

CSS中Class与ID的区别,Margin与Padding的区别

核心提示:Class可以反复使用而ID在一个页面中仅能被使用一次.有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题. Class可以反复使用而ID在一个页面中仅能被使用一次.有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题. 这两个区别都是比较容易混淆的问题,尤其是Class与ID,相信很多人并没有仔细了解过之中区别.以下是我的一些理解: 1. Clas

Equals和==的区别 公共变量和属性的区别小结_实用技巧

Equals 和==的区别 C#中有两种不同的相等:引用相等和值相等 == 是比较两个变量的值是否相同或两个引用是不是指向同一个内存地址. Equals()方法是比较两个对象指向内存空间里的内容是不是相同.也就是比较两个"引用类型" 是否是对同一对象的引用,即两个对象的内容是否相同. 公共变量和属性的区别 变量对于类本身而言,称为域. 属性是类的外部显示出来的特性,只是公开属性,如何进行赋值(set)和如何进行取值(get)都进行了封装,对于类外部是不可见的.对于外部使用者来说只能够使