返回

揭开iOS底层的神秘面纱:strong&copy&weak的背后故事

IOS

strong、copy和weak的内存管理规则

strong修饰符

strong修饰符是最常用的引用计数修饰符,它表示对象具有强引用关系。当一个对象被strong修饰的变量引用时,该对象的引用计数会加1;当strong修饰的变量释放时,对象的引用计数会减1。当对象的引用计数减为0时,该对象就会被销毁。

copy修饰符

copy修饰符表示对象具有拷贝引用关系。当一个对象被copy修饰的变量引用时,该对象的引用计数不会加1,而是会创建一个新的副本对象,并将新副本对象的引用计数置为1。当copy修饰的变量释放时,新副本对象的引用计数会减1。当新副本对象的引用计数减为0时,新副本对象就会被销毁。

weak修饰符

weak修饰符表示对象具有弱引用关系。当一个对象被weak修饰的变量引用时,该对象的引用计数不会加1。当weak修饰的变量释放时,对象的引用计数也不会减1。换句话说,weak修饰的变量不会影响对象的内存管理行为。

方法签名和attribute简写的含义

方法签名

方法签名由方法名、参数列表和返回值类型组成。方法名是方法的唯一标识符,参数列表是方法接受的参数,返回值类型是方法返回的值的类型。

attribute简写

attribute简写是用来修饰方法签名的特殊符号。attribute简写可以用来指定方法的各种属性,例如:

  • readonly:表示方法只能读取对象的状态,不能修改对象的状态。
  • nonatomic:表示方法不是原子性的,可以被多个线程同时调用。
  • nullable:表示方法的返回值可以为nil。

strong、copy和weak在实际开发中的应用

strong修饰符

strong修饰符通常用于修饰那些需要长期保持引用的对象,例如:

  • 视图控制器(UIViewController)
  • 模型对象(Model)
  • 委托对象(Delegate)

copy修饰符

copy修饰符通常用于修饰那些需要临时保持引用的对象,例如:

  • 字符串(String)
  • 数组(Array)
  • 字典(Dictionary)

weak修饰符

weak修饰符通常用于修饰那些不需要保持强引用的对象,例如:

  • 代理对象(Delegate)
  • 数据源对象(DataSource)
  • 观察者对象(Observer)

结语

strong、copy和weak修饰符是iOS开发中内存管理的三大法宝,理解这三大修饰符的底层原理对于编写出高质量的iOS代码至关重要。方法签名和attribute简写是方法签名的重要组成部分,理解这