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*****************************************************
———————————————————————————————————————————
版权声明:本文为博主原创文章,未经博主允许不得转载。
Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】的更多相关文章
- Android通用框架设计与完整电商APP开发系列文章
作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [导学视频] [课程详细介绍] 以下是部分 ...
- Kotlin实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果)
随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Kotlin在各类编程语言中的排名比较靠后(据TIOBE发布了 19 年 8 月份的编程语言排行榜,Kot ...
- 开发者如何快速搭建自己的电商App?
面向电商购物场景,HMS Core提供了创新的电商解决方案,帮助应用快速获客.提升转化率,实现业务增长.为了帮助开发者了解如何在电商购物类应用中集成HMS Core的各项能力,HMS Core开发了电 ...
- 从电商平台促销活动看电商app开发趋势
据亿合科技小编了解到:尽管各大电商平台都进入了品质和品牌时代,但对于消费者来说,低价依然是一个有吸引力的因素.尼尔森<网络购物者趋势研究>报告显示,2016年价格敏感型购物者的比例从15% ...
- 电商app开发新趋势!如何突显竞争力?
2017年是电商变化最大的一年,同时,也是最多机遇的一年,更是电商最好的时代,如最近所看到的亚马逊的市值已经超过了美国8大零售商的总和,带领美国率先走向了新零售时代;马云也在做改变,试图与线下的大卖场 ...
- 电商 APP 下单页(俗称车2) 业务流程概要设计
购物车是电商APP的一个关键功能点,一般购物车包含 3-4 个页面,分别是: 1.购物车的商品列表页 2.商品下单页 3.订单付款页面 4.订单付款成功页面 由于现有购物车逻辑相对混乱,这里重新整理一 ...
- Umi + Dva的数据传递学习Demo(代码有详细注释)
刚学习时写了篇笔记,以免自己忘记,用了一段时间后,觉得不如做个demo,代码写上注释,方便也在学习umi-dva的同学们理解更好,更容易上手. 这可能是网上注释最多,看了最易理解的学习小指南吧,哈哈. ...
- Android 仿电商app商品详情页按钮浮动效果
1.效果图如下: 这效果用户体验还是很酷炫,今天我们就来讲解如何实现这个效果. 2.分析 为了方便理解,作图分析 如图所示,整个页面分为四个部分: 1.悬浮内容,floatView 2.顶部内容,he ...
- 给零基础的小白从0到1的react-naitve电商app——简单易学!
先上链接https://github.com/duf1991/DY...我的第一个react-native学习成果,欢迎各位大佬star和issue!
随机推荐
- C++ CopyFile
复制文件 关键点 CopyFile The CopyFile function copies an existing file to a new file. The CopyFileEx functi ...
- Timing advance of GSM(时间提前量)
基本概念 时间提前量TA(Timing Advance)的作用是为了补偿电波传输延迟,而根本目的则是为了提高信道编解码效率.由于GSM采用TDMA,每载频8个时隙,应严格保持时隙间的同步,没有TA就无 ...
- Linux 可执行文件 ELF结构 及程序载入执行
Linux下ELF文件类型分为以下几种: 1.可重定位文件,比如SimpleSection.o: 2.可运行文件,比如/bin/bash. 3.共享目标文件,比如/lib/libc.so. 在Linu ...
- 用systemtap对sysbench IO测试结果的分析1
http://www.actionsky.com/docs/archives/171 2016年5月6日 黄炎 近期在一些简单的sysbench IO测试中, 遇到了一些不合常识的测试结果. 从结 ...
- Action 和 Func
C# 中的两个动态委托类型 也就是说我们不用在使用委托的时候就去声明一个委托对象,而是通过Action和Func就可以模拟出我们自己要用到的委托 区别: Action 表示没有返回值的委托 例如:A ...
- 转:关掉Archlinux中烦人的响铃
http://www.0597seo.com/?p=461 F**K,在Archlinux中,每当在听音乐,声音开得挺大的,忽然在控制台输错了命令,那可恶的该死的警告声猛的一下总是吓的我精神晃晃(这是 ...
- jquery 动态事件绑定(0512)
jquery动态事件绑定,父元素需为静态元素,(不能是动态生成): $("#parent").on("click","#child",fun ...
- 什么是CSS清除浮动?
在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外 ...
- 编译器失败,错误代码为xxx
问题:出现编译器失败,等一会儿出现csc.exe无响应,错误代码不一定是255,是其他的也可以试试 解决办法: 查看是否类似360之类的杀毒软件运行着,如果运行着,关掉然后重新试一下,应该就没有问题了 ...
- 1.4.2 solr字段类型--(1.4.2.4)使用Dates(日期)
1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...