iOS修饰符

一.strong与weak

为什么UI控件一般用weak就可以?

  因为我们在添加UI控件的时候一般会用addSubview操作,在addSubview的时候,就给该控件添加了一个强引用,所以在该对象被手动置为nil之前,或removeFromSuperView之前,或该控制器销毁之前,该控件不会被释放.addSubview不能等到该对象被释放后再使用.

  如果控制器定义了一个控件用strong修饰,那么该控件被该控制器强引用,如果再用addSubview,那么该控件就有两个强引用,如果该控制器被销毁,该控件也仍然会被销毁.

  如果该属性是一个控制器,如果用addChildViewController:的话,原理与一般UI控件一样,如果只用[self.view addSubview:vc2.view],那么该控制器对vc2没有强引用,vc2很容易被释放调.

  给一个对象置为nil,该对象不一定会被释放,如果该对象有两个强引用,置为nil就不能被释放,但是向该对象发送任何消息都不会有反应.

二.copy和strong

为什么NSString和NSArray一般用copy?

三. 

时间: 2024-12-23 23:51:33

iOS修饰符的相关文章

iOS 属性修饰符的区别

前言iOS5 之前 所有的 开发都需要开发者自己控制自己的对象的引用和释放.使用的修饰符是 assign.copy.retain iOS5 之后,Apple 推出了ARC(自动引用计数)机制,推出了新的修饰符替代之前的修饰符 strong.weak 简单说明1:ARC环境下,strong代替retain.weak代替assign2:weak的作用:在ARC环境下,,所有指向这个对象的weak指针都将被置为nil.这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_AC

iOS 属性修饰符记录 --不定时更新

重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰: #import <UIKit/UIKit.h> @interface MyView : UIView @property(nonatomic, retain) NSMUtableArray* data; @end 在对应的setter方法中,会以如下代码实现: if (_data != new

__weak与__block修饰符区别

API Reference对__block变量修饰符的解释,大概意思: 1.__block对象在block中是可以被修改.重新赋值的. 2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题. API Reference对__weak变量修饰符的解释,大概意思: 使用了__weak修饰符的对象,作用等同于定义为weak的property.自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil. 因此,__

[转]黑幕背后的__block修饰符

http://www.cocoachina.com/ios/20150106/10850.html 我们知道在Block使用中,Block内部能够读取外部局部变量的值.但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符. __block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符. 为什么不使用__block就不能在Block内部修改外部的局部变量? 我们把以下代码通过 clang -rewrite-ob

Xcode 7新特性Lightweight Generics 轻量级泛型与__kindof修饰符

Lightweight Generics 轻量级泛型,轻量是因为这是个纯编译器的语法支持(llvm 7.0),和 Nullability 一样,没有借助任何 objc runtime 的升级,也就是说,这个新语法在 Xcode 7 上可以使用且完全向下兼容(更低的 iOS 版本) 带泛型的容器 1 2 NSArray<NSString *> *strings = @[@"sun", @"yuan"]; NSDictionary<NSString *

Swift中的访问修饰符对于扩展(extension)的影响

在Swift中,有一种结构extension,类似于OC中的Category分类,非常适合于对代码进行管理 同时,常用的访问修饰符有public.internal.private,而对于这三个访问修饰符,对extension的影响是各不一样的 在本文中,我将对同一文件下和不同文件下的extension.在本类和其他类调用,共四种情况进行分别介绍. 在介绍前,我先创建了一个非常简单的iOS项目,并新建了一个Person类和Person类的extension文件,如下图: 其中,Person类的代码

@property的4类修饰符

1.读写性修饰符:readwrite | readonly readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法. readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法 2.setter相关修饰符:assign | retain | copy setter相关的修饰符表明setter方法应该如何实现 assign:表示直接赋值,用于基本数据类型(NSInteger和CGFloat)和C数据类型(

黑马程序员-权限修饰符

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- /** 方法的构成: *      [权限修饰符列表][别的修饰符列表] 返回值数据类型 方法名 (参数列表){ *          运行体; *          return 返回值; *      } *  *****!!!!!

__weak与__block修饰符到底有什么区别

API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari