OC-strong和weak

1.strong:强指针/强引用
weak:弱指针/弱引用
2.默认情况下,任何指针都是强指针
3.使用__weak修饰的指针为弱指针
4.Person *p = [[Person alloc] init];
[[Person alloc] init],系统会分配内存装这个对象,然后交给p这个指针去指着。

5.ARC判断准则:只要没有强指针指向对象,这个对象就会被销毁
6.如果指针p是局部变量,那函数完成时指针p就会被销毁,根据ARC,被指针所指

向的对象也会被销毁。
7.person对象里有个strong的dog属性。
person.dog = dog1;
这样,person里的_dog指针就会指向dog1指针所指的Dog对象。
因为是strong,所以只要person对象在,Dog对象就在。
所以普通对象要用strong。
8.循环引用:person对象里有个dog属性,dog对象里有个person属性。
Person *p = [[Person alloc] init];
p.dog = [[Dog alloc] init];
p.dog.owner = p;//加上这一句,人和狗都不能销毁。出现内存泄露
要想不发生内存泄露,其中一个指针必须是弱指针。

9.为什么UI控件和代理用weak?
UI控件:可以用strong,也可以用weak,但没必要用strong,因为只要控制器在,

控制器View内部的子控件都在。
代理:如果不用weak那么两边都是strong,会造成内存泄露。

10.总结
@property属性的用法
* weak(assign):代理/UI控件
* strong(retain):其他对象(除代理,UI控件,字符串以外的对象)
* copy:字符串
* assign:非对象类型(基本数据类型int/float/BOOL/枚举/结构体)

时间: 2024-10-31 19:16:53

OC-strong和weak的相关文章

(转)OC学习笔记 @property的属性 strong 和 weak 理解

在ObjectiveC里,用@property访问所有的实例变量.@property有一对属性:strong 和 weak.官方文档里的解释晦涩难懂:Stack Overflow里的用户RDC (http://stackoverflow.com/users/1371853/rdc) 给出了形象的解释: 把对象想象成一条狗,它要跑 (be deallocated).强指针就像一条拴在狗脖子上的狗链:只要攥在手里,狗就跑不了:如果5个人攥着5条狗链都拴着狗 (5个强指针指向对象),除非5条狗链都撒开

iOS strong与weak的使用

strong修饰的属性是强指针类型的,weak修饰的属性是弱指针类型的 ARC对于内存中的对象管理机制,当某个对象没有被强指针指向的时候,该对象就会被销毁. 所以不适当的使用strong和weak修饰属性容易造成内存泄露. OC对象(继承NSObject的类创建的对象)用strong修饰. UI控件连线的时候都会用weak修饰,给了大家一个假象.就是UI控件属性都是用weak修饰的.这种说法是错误的 当我们连线的时候,storyboard会根据图层结构分析,判断是否使用weak修饰,验证: 任何

IOS 开发笔记-基础 UI(8)控件连线的 strong 和 weak 设定

回忆 oc 的内存管理: objective-c 语法快速过(6)内存管理原理,objective-c 语法快速过(7)编译器特性ARC ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制,使用ARC机制,对象的申请和释放工作会在运行时,由编译器自动在代码中添加retain和release 1> strong:强指针引用的对象,在生命周期内不会被系统释放,在OC中,对象默认都是强指针 2> weak:弱指针引用的对象,系统会立即释放,弱指针可以指向其他已经被强指针引用的对象 他们都

IOS中级篇——何时使用copy,strong,weak,assign关键字 定义属性

? 父类指针可以指向子类对象 ? //定义block别名. typedef void (^LYItemOption)(); @interface LYItemArrow : LYItem@property(nonatomic,strong) Class desController; @property(nonatomic,copy) LYItemOption option; ? ? 1.strong :除NSString\block以外的OC对象 ? @property(nonatomic,st

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除

ARC - strong和weak指针

ARC指南1 - strong和weak指针 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除了weak指针系统),它也不

strong与weak

property 中的strong 与weak strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomic, strong) NSString *string1; @property (nonatomic, strong) NSString *string2; 有这样两个属性, @synthesize string1; @synthesize string2; 猜一下下面代码将输出什么结果? self.string1 = @"St

【转截strong和weak指针

参考文献:  iOS ARC 完全指南 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除了weak指针系统),它也不是类似

iOS开发-assign、retain、copy、strong、weak的区别

对于初学的开发者,对于assign.retain.copy.strong.weak的用法及意义可能不是很明白,我对于这个问题也研究了很久,写篇博文,巧巧代码,让我们来瞧瞧吧! 先定义一个Student类: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, copy) NSString *name; @end 然后先是mrc下的assign声明 @property (nona

object-c中的assign,retain,copy,atomic,nonatomic,readonly,readwrite以及strong,weak

assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy.assign指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息.你可以想象一个NSString实例,它是一个对象,