------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
例题:
有一个学生,他有一个学号为no.89757,姓名叫林俊杰,他拥有一辆小车和一只可爱的小狗,
那么问题来了,请用代码描述这些对象之间的关系(使用setter和getter),并对内存进行管理(非ARC)。
解答:
1)分析:
三个类:Student(属性:学号、姓名、小车、小狗),Car类,还有一个Dog类
2)简单的内存分析图:
3.代码实现:
Car类
Car.h文件
#import <Foundation/Foundation.h>
@interface Car : NSObject
@end
Car.m文件
#import "Car.h"
@implementation Car
- (void)dealloc
{
NSLog(@"Car-----dealloc!");
[super dealloc];
}
@end
Dog.h文件
#import <Foundation/Foundation.h>
@interface Dog : NSObject
@end
Dog.m文件
#import "Dog.h"
@implementation Dog
- (void)dealloc
{
NSLog(@"Dog-----dealloc!");
[super dealloc];
}
@end
Student类
Student.h文件
#import <Foundation/Foundation.h>
@class Car;
@class Dog;
@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
Student.m文件
#import "Student.h"
@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
{
NSLog(@"Student-----dealloc!");
[_name release];
[_car release];
[_dog release];
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Car.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
Student *s = [[Student alloc] init];
NSString *n = @"林俊杰";
s.name = n;
s.no = 89757;
Car *c = [[Car alloc] init];
Dog *d = [[Dog alloc] init];
s.car = c;
s.dog = d;
[d release];
[c release];
[s release];
return 0;
}
运行结果如下:
set方法内存管理总结: