iOS中assign,copy,retain之间的区别以及weak和strong的区别

作者&投稿:戴真 (若有异议请与网页底部的电邮联系)
iOS中assign,copy,retain之间的区别以及weak和strong的区别~

什么是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是一个非常好的选择。

什么是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是一个非常好的选择。

• copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。
• assign: 简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。

• retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1
那上面的是什么意思呢?
Copy 其实是建立了一个相同的对象,而 retain 不是:
比如一个 NSString 对象,地址为 0×1111,内容为@”ABC”
Copy 到另外一个 NSString 之 后,地址为 0×2222,内容相同,新的对象 retain 为 1, 旧 有对象没有变化
retain 到另外一个 NSString 之 后,地址相同(建立一个指针,指针拷贝),内容当然相 同,这个对象的 retain 值+1
assign 地址还是0x1111,内容也还是“ABC”。
也就是说,retain 是指针拷贝,copy 是内容拷贝。
strong,weak 用来修饰属性。
strong 用来修饰强引用的属性;
@property (strong) SomeClass * aObject;
对应原来的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;

weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject;
对应原来的
@property (assign) SomeClass * aObject;


BIOS怎么进入。。???
以win10系统为例 开始---设置---更新和安全---恢复---高级启动---立刻重新启动 疑难解答---高级选项---UEFI固件设置---重启

怎么学习BIOS操作,怎么进入操作界面
(18)Assign PCI IRQ For VGA:选Enable时,机器将自动设定PCI显示卡的IRQ到系统的DRAM中, 以提高显示速度和改善系统的性能。 (19)PCI\/VGA Palett Snoop:该项用来设置PCI\/VGA卡能否与MPEG ISA\/VESA VGA卡一起用。当 PCI\/VGA卡与MPEG ISA\/VESA VGA卡一起用或使用其他非标准VGA时,该项应设为Enable。 (20)OS...

c语言中string是啥意思啊? 控制啥的啊
string &assign(const char *s,int n);\/\/用c字符串s开始的n个字符赋值 string &assign(const string &s);\/\/把字符串s赋给当前字符串 string &assign(int n,char c);\/\/用n个字符c赋值给当前字符串 string &assign(const string &s,int start,int n);\/\/把字符串s中从start开始的n个字符赋给当前字...

C++:怎样在string类中完成两个字符串的连接,复制?
函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符'\\n'分开。string的赋值:string &operator=(const string &s);\/\/把字符串s赋给当前字符串string &assign(const char *s);\/\/用c类型字符串s赋值string &assign(const char *s,int n);\/\/用c字符串s开始的n个字符赋值...

BIOS里面有main , advanced , H\/W monitor , boot , Secuity,exit分别是...
(18) Assign PCI IRQ For VGA:选Enable时,机器将自动设定PCI显示卡的IRQ到系统的DRAM中,以提高显示速度和改善系统的性能。 (19) PCI\/VGA Palett Snoop:该项用来设置PCI\/VGA卡能否与MPEGISA\/VESAVGA卡一起用。当PCI\/VGA卡与MPEGISA\/VESAVGA卡一起用时,该项应设为Enable,否则,设为Disable。 (20) OS\/2 ...

设备管理器里USB串行总线设备不见了怎么办?谢谢了
BIOS里没那么多USB的~~启动计算机,进入主板BIOS设置(台式机按del键,笔记本按F2键),检查BIOS中USB的相关选项是否已经打开:OnChip USB 设定为Enabled;USB Controller设定为Enabled;PNP OS Installed设定为Yes;Assign IRQ For USB设成Enabled。要正常使用USB设备首先要开启USB接口,在主板BIOS 里可以...

请问有谁知道VNC软件的源代码?
(r); requested.assign_union(reqRgn); if (!incremental) { updates.add_changed(reqRgn); ...os->pad(1); if (wsccb) nRects++; if (needSetDesktopSize) nRects++; os->writeU16(nRects

怎样调整BIOS最好用?
19、Assign IRQ For VGA(给VGA设备分配IRQ:Interrupt Request,中断请求) 选项:Enabled,Disabled 目前,许多高端图形卡都需要IRQ来增加与主板的数据交换速度,开启之后能大幅提高总体性能。相反的是,低端图形卡并不需要分配IRQ,在显卡的使用手册中有说明它是否调用中断,不占用中断的好处是节省系统资源。

BIOS 是干嘛用的??怎么设置
ASSIGN IRQ FOR VGA(分配IRQ给VGA)IRQ即系统中断地址。OS SELECT FOR DRAM>64MB(设定OS2使用内存容量)如果正在使用OS\/2系统并且系统内存大于64MB,则该项应为Enable,否则高于64MB的内存无法使用,一般情况下为Disable.; HDD S.M.A.R.T. capability(硬盘自我检测)此选项可以用来自动检测硬盘的工作性能,如果硬盘即...

铭瑄主板BIOS怎么设置前面面板有声音
除了上述内容外,高级BIOS设置中还有一些其他设置项目。“APIC Mode”是高级可编程中断控制的模式设置,默认模式为Enabled,不需要改动。APIC一般用于扩展可利用的IRQ数量,以避免IRQ的共享和冲突发生; “MSP Version Ctrl For OS”,这是设置在操作系统下多处理器的运行版本,一般设置为“1.4”,如果用户使用的双处理器系统...

句容市17062775489: ios arc strong 和copy的区别 -
舒定盐酸: 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 ...

句容市17062775489: iOS定义属性时,什么情况使用copy,assign和retain -
舒定盐酸: 具体情况要具体分析~而且编程环境下的情况也各不相同,我简单介绍一下这三个关键词. assign用于简单数据类型,如NSInteger,double,bool, retain和copy用于对象, copy用于当a指向一个对象,b也想指向同样的对象的时候,如果用assign,a...

句容市17062775489: ios 中@property 的copy有什么作用 -
舒定盐酸: copy: 建立一个索引计数为1的对象,然后释放旧对象@property (nonatomic, assign) NSString *title;什么是assign,copy,retain之间的区别?assign: 简单赋值,不更改索引计数(Reference Counting).copy: 建立一个索引计数为1的对...

句容市17062775489: ios开发 copy和strong的区别 -
舒定盐酸: IOS内存管理详解 copy 和 retain的区别 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对...在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此... strong与retain类似,weak与unsafe_unretained功能差不...

句容市17062775489: iOS 的内存管理和虚拟内存机制具体是怎么运作的 -
舒定盐酸: 1、iOS设备普遍内存比较小是真,但是谁告诉你小内存也流畅舒服了?512MB内存的iOS设备配合iOS8已经让人处于摔平板摔手机的边缘了好么.重载狂魔iPad Mini2罪魁祸首也是仅有1GB的内存. 2、如其他诸位所言,iOS有虚拟内存地址,...

句容市17062775489: iOS中assign和weak修饰符的区别 -
舒定盐酸: 第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数、2.其友元函数访问.不能被任何其他访问,该类的对象也不能访问. protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问.但不能被...

句容市17062775489: 关于IOS中变量声明方式@interface和@property的区别 -
舒定盐酸: 区别如下: 1.只在@interface中定义变量的话,所定义的变量只能在当前的类中访问,在其他类中是访问不了的;而用@property声明的变量可以在外部访问.2.用了@property去声明的变量,可以使用“self.变量名”的方式去读写变量.而用@interface的方式就不可以.

句容市17062775489: ios property 属性有哪些修饰符 有什么作用 -
舒定盐酸: 1.读写性修饰符:readwrite readonlyreadwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法.readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法2.setter相关修饰符...

句容市17062775489: ios中的持久化操作方式有哪些 -
舒定盐酸: iOS中的数据持久化方式,基本上有以下四种:属性列表、对象归档、SQLite3和Core Data1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了@interface User : NSObject <NSCoding>@...

句容市17062775489: iOS Copy 和 MutableCopy的区别 深浅拷贝的区别 -
舒定盐酸: 简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网