strong weak assign copy
2018-09-29 本文已影响0人
fordG
-
strong 表示指向并拥有该对象,对象引用计数加1,该对象只要引用计数不为0,就不会销毁, 可以通过nil来强行销毁.
-
weak 表示指向但不拥有该对象,对象引用计数不会加1,该对象会自动在内存中被销毁.
-
assign 主要用于修饰基本数据类型, 这些数值都存在于栈种, 系统会帮你销毁
-
copy 主要用于对对象的拷贝,分为指针拷贝和值拷贝,如果自定义对象要想使用copy来修饰,须实现nscopy协议
注意事项:
-
weak一般用来修饰对象,assign一般用来修饰基本数据类型,注意assign修饰的对象被释放后,指针的地址依然存在, 造成"野指针", 自定义的对象在堆上, 容易造成崩溃。栈上的内存系统会自动处理, 不会造成"野指针"。
-
copy和strong类型, 不同之处是, strong复制的是多个指针指向同一个地址,而copy的复制每次都会在内存中复制一份对象, 指针指向不同的地址。copy一般用在修饰有对应可变类型的不可变对象上, 如NSString NSArray等。