小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)
来源:互联网 发布:微信改单三中三软件 编辑:程序博客网 时间:2024/06/02 03:25
//
// main.m
// set方法的内存管理分析
//
// Created by admin on 15/8/5.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//p 1
Person * p = [[Person alloc] init];
// c1 1
Car * c1 = [[Car alloc] init];
c1.speed = 100;
//c1 2
[p setCar:c1];
[p drive];
//c1 1
[c1 release];
/*
[p setCar:c1];
[p drive];
//c2 1
Car * c2 = [[Car alloc] init];
c2.speed = 350;
//c2 2
[p setCar:c2];
[p drive];
//c2 1
[c2 release];
//p 0
[p release];
}
return 0;
}
//
// Car.h
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property int speed;
- (void)run;
@end
//
// Car.m
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import "Car.h"
@implementation Car
- (void)dealloc
{
[super dealloc];
NSLog(@"Car 被销毁了 %d速度",_speed);
}
- (void)run
{
NSLog(@"汽车跑起来了");
}
@end
//
// Person.h
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import <Foundation/Foundation.h>
#import "Car.h"
@interface Person : NSObject
{
Car * _car;
NSString * _name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setCar:(Car *)car;
- (Car *)car;
- (void)drive;
@end
//
// Person.m
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import "Person.h"
//配对原则:new alloc retain 对应一个release,autorelease
@implementation Person
- (void)setName:(NSString *)name
{
if (_name != name)
{
[_name release];
_name = [name retain];
}
}
- (NSString *)name
{
return _name;
}
//面试笔试,出题率非常高
- (void)setCar:(Car *)car
{
if (_car != car)
{ //c1 0
//relese旧值
[_car release];//[nil release];
//c2 2
//retain新值
_car = [car retain];
}
}
- (Car *)car
{
return _car;
}
- (void)drive
{
[_car run];
}
- (void)dealloc
{
//目的是要保证在p对象存在的时候,car对象一定存在
//对象p被销毁的时候,
//0
//c2 0
[_car release];
[_name release];
[super dealloc];
NSLog(@"Person 被销毁了");
}
@end
// main.m
// set方法的内存管理分析
//
// Created by admin on 15/8/5.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//p 1
Person * p = [[Person alloc] init];
// c1 1
Car * c1 = [[Car alloc] init];
c1.speed = 100;
//c1 2
[p setCar:c1];
[p drive];
//c1 1
[c1 release];
/*
[p setCar:c1];
[p drive];
//c2 1
Car * c2 = [[Car alloc] init];
c2.speed = 350;
//c2 2
[p setCar:c2];
[p drive];
//c2 1
[c2 release];
//p 0
[p release];
}
return 0;
}
//
// Car.h
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property int speed;
- (void)run;
@end
//
// Car.m
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import "Car.h"
@implementation Car
- (void)dealloc
{
[super dealloc];
NSLog(@"Car 被销毁了 %d速度",_speed);
}
- (void)run
{
NSLog(@"汽车跑起来了");
}
@end
//
// Person.h
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import <Foundation/Foundation.h>
#import "Car.h"
@interface Person : NSObject
{
Car * _car;
NSString * _name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setCar:(Car *)car;
- (Car *)car;
- (void)drive;
@end
//
// Person.m
// 01-手动内存管理基本概念
//
// Created by apple on 14-3-17.
//
//
#import "Person.h"
//配对原则:new alloc retain 对应一个release,autorelease
@implementation Person
- (void)setName:(NSString *)name
{
if (_name != name)
{
[_name release];
_name = [name retain];
}
}
- (NSString *)name
{
return _name;
}
//面试笔试,出题率非常高
- (void)setCar:(Car *)car
{
if (_car != car)
{ //c1 0
//relese旧值
[_car release];//[nil release];
//c2 2
//retain新值
_car = [car retain];
}
}
- (Car *)car
{
return _car;
}
- (void)drive
{
[_car run];
}
- (void)dealloc
{
//目的是要保证在p对象存在的时候,car对象一定存在
//对象p被销毁的时候,
//0
//c2 0
[_car release];
[_name release];
[super dealloc];
NSLog(@"Person 被销毁了");
}
@end
0 0
- 小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)
- 小白学开发(iOS)OC_ 单个对象的内存管理(2015-08-02)
- 小白学开发(iOS)OC_多个对象的内存管理(2015-08-03)
- 小白学开发(iOS)OC_手动内存管理(2015-08-02)
- 小白学开发(iOS)OC_ 手动内存管理类的相互引用问题(2015-08-05)
- 小白学开发(iOS)OC_封装_成员变量(set get方法)(2015-07-24)
- 小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)
- 小白学开发(iOS)OC_ 字符串的比较判断(2015-08-12)
- 小白学开发(iOS)OC_ 基本数据类型的包装类(2015-08-14)
- 小白学开发(iOS)OC_类方法和对象方法(2015-07-22)
- 小白学开发(iOS)OC_私有方法(2015-07-28)
- 小白学开发(iOS)OC_构造方法(2015-07-29)
- 小白学开发(iOS)OC_继承(2015-07-26)
- 小白学开发(iOS)OC_多态(2015-07-27)
- 小白学开发(iOS)OC_第一个OC (与C的区别)(2015-07-21)
- 小白学开发(iOS)OC_类的本质(2015-07-27)
- 小白学开发(iOS)OC_成员变量的作用域(2015-07-27)
- 小白学开发(iOS)OC_类的互引用(2015-07-29)
- PHP get_class 返回对象的类名
- yii2关于HTTP请求处理的总结
- Sublime text 2/3 中 Package Control 的安装与使用方法
- YUV格式学习:填充YUV444以及YUYV、YVYU、UYVY、VYUY
- 验证二叉查找树
- 小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)
- Lua实现类的封装
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- C# 中如何调用DLL文件(分两种情况,托管与非托管)
- leetcode数据库sql之Delete Duplicate Emails
- 文章标题
- 【iOS知识学习】_iOS动态改变TableView Cell高度
- 使用Device Farm真机测试Android程序
- sass与less区别