Objective-C中的@property的retain写法的原理
来源:互联网 发布:淘宝图片空间全部删除 编辑:程序博客网 时间:2024/05/17 02:06
=============main.m==================
#import “Person.h”
int main(){
Person *Sam = [Person new];
Car *bmw = [Car new];
[Sam setCar:bmw];
[Sam FuckCar];
[bmw release]; //进行对象回收
//创建了新的一辆车子
Car * landrover= [Car new];
[Sam setCar:landrover];
[Sam FuckCar];
[landrover release]; //进行对象回收
[Sam release] ; }
=======Person.m=============
@implementation
-(void)setCar:(Car *)car{
_car = [_car retain]; }
-(void)FuckCar{
[_car rrun]; }
-(void)dealloc{ // 内存回收后的“遗言”
[_car release];
NSlog(@“Sam is dead!”) ;
[super dealloc]; }
@end
//如果对象参数有2个,在dealloc中只能释放一个对象 造成内存泄漏
场景2:对象参数有多个,如果按照场景1就会造成内存泄漏,解决方案
@implementation
-(void)setCar:(Car *)car{
[_car release]; //新增了这一句
_car = [_car retain]; }
-(void)FuckCar{
[_car rrun]; }
-(void)dealloc{ // 内存回收后的“遗言”
[_car release];
NSlog(@“Sam is dead!”) ;
[super dealloc]; }
@end
在新增对象参数之前把旧的对象删除,
场景3:如果对象参数是一个,但是连续传入两次,导致对象的retainCount=0的时候再次retain会造成僵尸对象复活,解决
=============main.m==================
#import “Person.h”
int main(){
Person *Sam = [Person new];
Car *bmw = [Car new];
[Sam setCar:bmw];
[Sam FuckCar];
[bmw release]; //进行对象回收
[Sam setCar:bmw];
[Sam FuckCar];
[Sam release] ; }
================Person.m============
@implementation
-(void)setCar:(Car *)car{
//如果是同一个对象不需要retain和release
if(_car != car){
[_car release];
_car = [_car retain]; } }
-(void)FuckCar{
[_car rrun]; }
-(void)dealloc{ // 内存回收后的“遗言”
[_car release];
NSlog(@“Sam is dead!”) ;
[super dealloc]; }
@end
最终版本的写法就是:@property(nonatomic,retain)Car *car;的语法格式
- Objective-C中的@property的retain写法的原理
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Objective-C 2.0属性(Property) retain和copy的区别
- objective-c中property 的属性strong,weak, retain, copy
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析 【三、@property (retain)和@synthesize的默认实现】
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- 洛谷2524 Uim的情人节礼物·其之弐解题报告
- 查看Eclipse的版本号
- 为人处事之道
- 点评互联网创业的“南派”和“北派”
- 软件工程视频总结(2)----整体回顾
- Objective-C中的@property的retain写法的原理
- lua-vs开发环境配置
- 组成原理作业
- tuzicms企业网站系统安装图文教程
- POJ 1330 Nearest Common Ancestors (LAC)
- 混杂设备与信号量
- anroid解决键盘弹出后遮住登录按钮的问题
- Best Time to Buy and Sell Stock III 解题思路&代码
- 深入理解javascript原型和闭包