Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】


———————————————————————————————————————————
电商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*****************************************************


———————————————————————————————————————————

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/wzy294250051/p/4787881.html