对于 内存管理的练习
练习一:
#import <Foundation/Foundation.h>
#import "person.h"
//#import "watermelon.h"
#import "Car.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*---------------多人多车----------------*/
//人
person *jabez = [[person alloc]init];
[jabez setName:@"jabez"];
person *sj= [[person alloc]init];
[sj setName:@"songjiang"];
person *glx = [[person alloc]init];
[glx setName:@"gaolingxia"];
person *xj= [[person alloc]init];
[xj setName:@"xiejun"];
//车
Car *BYD=[[Car alloc]init];
[BYD setName:@"比亚迪"];
Car *FT=[[Car alloc]init];
[FT setName:@"丰田"];
//--------每个人都有BYD-----
[jabez setCars:BYD];
[sj setCars:BYD];
[glx setCars:BYD];
[xj setCars:BYD];
[xj setCars:FT];
[jabez setCars:FT];
[glx setCars:FT];
[sj setCars:FT];
NSLog(@"人xj计数:-----%ld",[xj retainCount]);
NSLog(@"汽车byd计数器----%ld",[BYD retainCount]);
NSLog(@"汽车ft计数器----%ld",[FT retainCount]);
[glx release];
glx=nil;
[xj release];
xj=nil;
[jabez release];
jabez=nil;
[sj release];
sj=nil;
[BYD release];
NSLog(@"汽车byd计数器----%ld",[BYD retainCount]);
NSLog(@"汽车ft计数器----%ld",[FT retainCount]);
}
return 0;
}
在person.h
#import <Foundation/Foundation.h>
//#import "watermelon.h"
#import "Car.h"
@interface person : NSObject
@property (nonatomic ,retain)Car *cars;
@property (nonatomic, assign)NSString *name;
@end
在preson.m
#import "person.h"
@implementation person
- (void) dealloc//内置函数,在子类重写时要调用父类。
{
[_cars release];
NSLog(@"人%@被释放",_name);
[super dealloc];
}
- (void)setPerson:(Car *)car//与@property 差异,除了判断句其他相同
{
if(_cars!=car)
{
[_cars release];
_cars=[car retain];
}
}
@end
在car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property (nonatomic, assign)NSString *name;
@end
在car.m中
#import "Car.h"
@implementation Car
- (void) dealloc
{
NSLog(@"对象 %@car 被释放",_name);
[super dealloc];
}
@end
值得注意:
@class与import
@class只用在接口,只引入类,不能引用实现的相关文件
练习二:
/*------------------微博转发-----------------------*/
person *per1 = [[person alloc]init];
person *per2 = [[person alloc]init];
[per1 setName:@"发的人"];
[per2 setName:@"转发人"];
[per1 setAge:12];
[per2 setAge:22];
[per1 setBirthday:@"1992-12-25"];
[per2 setBirthday:@"2000-1-3"];
[per1 setPhoto:@"photo1"];
[per2 setPhoto:@"photo2"];
[per1 setSex:@"女" ];
[per2 setSex:@"女"];
[per1 setSign:@"今天不开森"];
[per2 setSign:@"HAPPY "];
weibo *arti=[[weibo alloc]init];
[arti setID:123];
[arti setContest:@"阴雨连绵"];
[arti setDate:@"2015-05-21"];
[arti setFronPerson:per1];
[arti setTitle:@"today"];
[arti setRelayPerson:per2];
NSLog(@"%@,在%@,发了%@,并于被转发",[per1 name],[arti date],[arti contest]);
//
// weibo.h
// ARC
//
// Created by 非凡程序员 on 15/5/21.
// Copyright (c) 2015年 非凡程序员. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface weibo : NSObject
@property(nonatomic, assign) int ID;
@property(nonatomic, weak) NSString *contest;
@property(nonatomic, weak) NSString *title;
@property(nonatomic, weak) person *fronPerson;
@property(nonatomic, weak) NSString *date;
@property(nonatomic, weak) person *relayPerson;
@end
//
// weibo.m
// ARC
//
// Created by 非凡程序员 on 15/5/21.
// Copyright (c) 2015年 非凡程序员. All rights reserved.
//
#import "weibo.h"
@implementation weibo
- (void)dealloc
{
NSLog(@"weibo被释放");
}
@end
//
// person.h
// ARC
//
// Created by 非凡程序员 on 15/5/21.
// Copyright (c) 2015年 非凡程序员. All rights reserved.
//
#import <Foundation/Foundation.h>
//@class watermelon;
@class weibo;
@interface person : NSObject
@property(nonatomic, weak) NSString *name;
@property(nonatomic, assign)int age;
@property(nonatomic, weak) NSString *sex;
@property(nonatomic, weak) NSString *birthday;
@property(nonatomic, weak) NSString *photo;
@property(nonatomic, weak) NSString *sign;
@property(nonatomic, strong) weibo *weibo;
//@property (nonatomic, strong)watermelon *Personmelon;
@end
//
// person.m
// ARC
//
// Created by 非凡程序员 on 15/5/21.
// Copyright (c) 2015年 非凡程序员. All rights reserved.
//
#import "person.h"
@implementation person
- (void)dealloc
{
NSLog(@"%@对象被释放",_name);
}
@end