多个对象之间的内存管理
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Book.h"
int main()
{
Book *b = [[Book alloc] init];
Person *p1 = [[Person alloc] init];
[p1 setBook:b];
[p1 release];
p1 = nil;
[b release];
b = nil;
return 0;
}
@interface Book : NSObject
{
int _price;
}
- (void)setPrice:(int)price;
- (int)price;
@end
#import "Book.h"
@implementation Book
- (void)setPrice:(int)price
{
_price = price;
}
- (int)price
{
return _price;
}
- (void)dealloc
{
NSLog(@"Book对象被回收");
[super dealloc];
}
@end
#import "Book.h"
@interface Person : NSObject
{
Book *_book;
}
- (void)setBook:(Book *)book;
- (Book *)book;
@end
#import "Person.h"
@implementation Person
- (void)setBook:(Book *)book
{
_book = [book retain];
}
- (Book *)book
{
return _book;
}
- (void)dealloc
{
[_book release];
NSLog(@"Person对象被回收");
[super dealloc];
}
@end
set方法的内存管理
- (void)setAge:(int)age
{
_age = age;
}
2> OC对象类型
- (void)setCar:(Car *)car
{
if ( car != _car )
{
[_car release];
_car = [car retain];
}
}
- (void)dealloc
{
[_car release];
[super dealloc];
}
*/
int main()
{
Student *stu = [[Student alloc] init];
[stu release];
return 0;
}
void test3()
{
Student *stu = [[Student alloc] init];
Car *c = [[Car alloc] init];
stu.car = c;
Dog *d = [[Dog alloc] init];
stu.dog = d;
NSString *s = @"Jack";
stu.name = s;
[d release];
[c release];
[stu release];
}
void test2()
{
Person *p1 = [[Person alloc] init];
p1.age = 20;
Car *c1 = [[Car alloc] init];
c1.speed = 100;
p1.car = c1;
[c1 release];
Car *c2 = [[Car alloc] init];
c2.speed = 200;
p1.car = c2;
[c2 release];
[p1 release];
}
void test1()
{
Person *p = [[Person alloc] init];
p.age = 20;
Car *c1 = [[Car alloc] init];
c1.speed = 250;
p.car = c1;
[c1 release];
p.car = c1;
p.car = c1;
p.car = c1;
p.car = c1;
p.car = c1;
p.car = c1;
p.car = c1;
[p release];
}
void test()
{
Person *p = [[Person alloc] init];
p.age = 20;
Car *c1 = [[Car alloc] init];
c1.speed = 250;
p.car = c1;
Car *c2 = [[Car alloc] init];
c2.speed = 300;
p.car = c2;
[c2 release];
[c1 release];
[p release];
}
#import "Car.h"
@interface Person : NSObject
{
Car *_car;
int _age;
}
- (void)setAge:(int)age;
- (int)age;
- (void)setCar:(Car *)car;
- (Car *)car;
@end
@implementation Person
- (void)setCar:(Car *)car
{
if (car != _car)
{
[_car release];
_car = [car retain];
}
}
- (Car *)car
{
return _car;
}
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)dealloc
{
[_car release];
NSLog(@"%d岁的Person对象被回收了", _age);
[super dealloc];
}
@end
@interface Car : NSObject
{
int _speed;
}
- (void)setSpeed:(int)speed;
- (int)speed;
@end
@implementation Car
- (void)setSpeed:(int)speed
{
_speed = speed;
}
- (int)speed
{
return _speed;
}
- (void)dealloc
{
NSLog(@"速度为%d的Car对象被回收了", _speed);
[super dealloc];
}
@end
#import "Car.h"
#import "Dog.h"
@interface Student : NSObject
{
int _no;
NSString *_name;
Car *_car;
Dog *_dog;
}
- (void)setNo:(int)no;
- (int)no;
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setCar:(Car *)car;
- (Car *)car;
- (void)setDog:(Dog *)dog;
- (Dog *)dog;
@end
@implementation Student
- (void)setNo:(int)no
{
_no = no;
}
- (int)no
{
return _no;
}
- (void)setName:(NSString *)name
{
if ( name != _name )
{
[_name release];
_name = [name retain];
}
}
- (NSString *)name
{
return _name;
}
- (void)setCar:(Car *)car
{
if ( car != _car )
{
[_car release];
_car = [car retain];
}
}
- (Car *)car
{
return _car;
}
- (void)setDog:(Dog *)dog
{
if ( dog != _dog )
{
[_dog release];
_dog = [dog retain];
}
}
- (Dog *)dog
{
return _dog;
}
- (void)dealloc
{
[_name release];
[_car release];
[_dog release];
[super dealloc];
}
@end
@interface Dog : NSObject
@end
@implementation Dog
@end