关于一些UI的property应该使用retain、strong还是weak的问题

本文讨论了iOS开发中不同属性如IBOutlet、NSString等的内存管理策略,包括使用weak、strong、retain及copy的区别,并解释了何时及为何选择特定的内存管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于一些UI的property应该使用retain、strong还是weak。
1、在斯坦福大学的那个视频上看到的是说使用weak,ios5会帮你做剩余的一切,连release也不用了,dealloc都不用重载了(或许我没看那么认真,感觉好像是这样)。
2、在公司的项目代码上经常看到使用retain
3、使用@property进行了声明,还需要声明实例变量吗(在Interface下面打两个花括号那种)。在斯坦福大学的那个视频上好像没看到使用实例变量(目前看到第三个)。
4、目前流行的iphone4和iphone4s是使用ios4吗?那为了兼容,是否不应该使用ios5的新特性。


1、对于retain来说,一般指的是指针,这些属性需要保存引用计数,防止出现僵尸的情况,当时对于NSString类型,这个不是retain,而是copy,但是对于strong来说,这些你都不需要考虑,它会自己判断是选择retain还是copy,而对于assign来说,一是非指针变量,比如说NSInteger之类的,还有就是避免出现循环引用的时候,对于weak,其和assign差不多,但是它多了一点,就是,它会自动对该类型变量设置为nil。
2、至于公司经常使用retain的原因,一个是由于编码习惯,还有就是根据项目需要。
3、是否需要声明实例变量,这些都要看特殊情况的,假如在interface中你并没有声明实例变量,但是你在对于的.m文件中@synthesize的时候,那个时候其实就表明了你已经声明这个实例变量了。
4、对于这个问题,系统是可以升级的,并没有什么规定iphone4s只能使用IOS4。



1.具体一点:IBOutlet可以为weak,NSString为copy,Delegate一般为weak,其他的看情况。一般来说,类“内部”的属性设置为strong,类“外部”的属性设置为weak。说到底就是一个归属权的问题。小心出现循环引用导致内存无法释放。
2.不用ARC的话就会看到很多retian。
3.如果你写了@synthesize abc = _abc;的话,系统自动帮你声明了一个_abc的实例变量。


  使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
  使用copy: 对NSString 
  使用retain: 对其他NSObject和其子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值