———————————————————————————————————————————
电商APP应用
*************************************************Goods.h*****************************************************
#import <Foundation/Foundation.h>
//结构体定义
typedef struct
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}ProdDate;
@interface Goods : NSObject
//这里要根据合适的情况选择set/get的内存处理方式
//商品名称
@property (nonatomic,retain) NSString *productName;//(注意这里创建的实例变量名,其实都是带下划线的,这里之前已经学习过)
//单价
@property (nonatomic,assign) int productPrice;
//重量
@property (nonatomic,assign) float productWeight;
//商品展示图片(图片路径)
@property (nonatomic,retain) NSString *imgUrl;
//生产日期(这里是结构体类型,不用加‘*’号)
@property (nonatomic,assign) ProdDate produceDate;
//过期日期
@property (nonatomic,assign) ProdDate expireDate;
@end
*************************************************Goods.h*****************************************************
*************************************************Goods.m*****************************************************
#import "Goods.h"
@implementation Goods
- (void)dealloc
{
NSLog(@"Goods dealloc!");
[_productName release];//因为是retain类型的,所以说OC对象最后应该内存释放一次(释放的就是创建时候new出来计数1)
[_imgUrl release];
[super dealloc];
}
@end
*************************************************Goods.m*****************************************************
*************************************************Person.h*****************************************************
#import <Foundation/Foundation.h>
typedef enum {kSexMan,kSexWoman,kSexYao}Sex;
@interface Person : NSObject
//姓名
@property (nonatomic,retain) NSString *name;
//性别(一定不要用int类型,要用枚举类型)
@property (nonatomic,assign) Sex sex;
//年龄
@property (nonatomic,assign) int age;
//身高
@property (nonatomic,assign) float height;
@end
*************************************************Person.h*****************************************************
*************************************************Person.m****************************************************
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"Person dealloc!");
[_name release];
[super dealloc];
}
@end
*************************************************Person.m****************************************************
**************************************************Setter.h*****************************************************
#import "Person.h"
#import "Goods.h"
@interface Seller : Person
//卖家应该有一个Goods类型的参数,也就是卖的货物
@property (nonatomic,retain) Goods *goods;
@end
**************************************************Setter.m*****************************************************
#import "Seller.h"
@implementation Seller
- (void)dealloc
{
NSLog(@"Seller dealloc!");
[_goods release];//与之对应的是Seller里面@property的那个goods的属性
[super dealloc];
}
@end
**************************************************Setter.m*****************************************************
***************************************************Buyer.h****************************************************
#import "Person.h"
@interface Buyer : Person
//购买者没有参数
@end
***************************************************Buyer.h****************************************************
***************************************************Buyer.m****************************************************
#import "Buyer.h"
@implementation Buyer
- (void)dealloc
{
NSLog(@"Buyer dealloc!");
[super dealloc];
}
@end
***************************************************Buyer.m****************************************************
***************************************************mian.m*****************************************************
#import <Foundation/Foundation.h>
#import "Seller.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Seller *seller=[[Seller alloc]init];//seller 1
Goods *g=[[Goods alloc]init];//g 1
NSLog(@"g=%tu",[g retainCount]);//验证输出 g 1
seller.goods=g;//g 2 (说明一下,在实例对象seller调用goods的set方法的时候,因为我们goods的set方法是@property retain类型,所以说在set方法中_goods(也就是g)的地址内存计数+1)
NSLog(@"g=%tu",[g retainCount]);//验证输出 g 2
[g release];//这两个地方,因为new了,所以必须选择释放 g 1
[seller release];//seller 0 g 0 (另外,在sellter release的时候,里面调用了父类的dealloc,也就是Person的dealloc,所以Person也释放了一次,故会输出“Person dealloc!”)
}
return 0;
}
***************************************************main.m*****************************************************
———————————————————————————————————————————
版权声明:本文为博主原创文章,未经博主允许不得转载。