pragma mark 多個對象內(nèi)存管理練習(xí)實現(xiàn)
pragma mark 概念
/**
類 就是用來存儲數(shù)據(jù)的
*/
pragma mark 代碼
#pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#include "Status.h"
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
#warning 練習(xí)
/*
模擬場景:
* lyh 在 2012-1-1 22:30:44 注冊了一個賬號
(名稱: lyh@163.com 密碼:123456)
* lyh的生日 是 1992-12-12 23:22:44
* lyh 發(fā)布一條說說
* 文字內(nèi)容 @"學(xué)學(xué) 以色列"
* 圖片 @"test.png"
* 發(fā)表時間 : 2013-12-11 23:21:45
* 作者: lyh
* 被轉(zhuǎn)發(fā)的說說 : 沒有
* 評價數(shù) : 100
* 轉(zhuǎn)發(fā) : 33
* 點贊數(shù) : 222
* lys 在 2013-1-1 22:10:33 注冊了一個賬號
{名稱 : lys@163.com 密碼: 123456}
* lys 的生日1989 - 3 - 4 ,16: 14: 22
lys 早2015-6 13: 12 :44
lys 在 2015-12-23 20:44:23時, 換發(fā)了lyh之前發(fā)布的說說, 并且還附帶了一句話 @“會玩呀”
*/
#warning 分析 拆分類
/**
至少應(yīng)該有三個類:
賬號類(Account)
注冊的時間 (registerTime)
賬號 (email)
密碼 (pwd)
用戶類:(Author)
用戶的昵稱 (name)
用戶的頭像 (icon)
用戶的是否是會員 (vip)
用戶對應(yīng)的賬號 (account)
用戶的生日 (用來做營銷, 到生日的時候 提示或者送一些其他小禮物) (birthday)
微博類: (Status)
微博的正文 (text)
微博配圖 (pricture) (可能有一張笋庄、多張、高清登馒、中圖义矛、小圖)(可以抽取為一個類)
微博的發(fā)布時間 (createTime)
微博對應(yīng)的作者(用戶)(author)
評論數(shù) (commoentCount)
轉(zhuǎn)發(fā)數(shù) (retweetCount)
贊數(shù) (likeCount)
轉(zhuǎn)發(fā)微博 (repostStatus)
微博中用戶, 用戶中有賬號
1. 賬號 2.用戶 3.微博
*/
// 1.給老王創(chuàng)建帳號
Account *lwAccount = [[Account alloc]init];
lwAccount.email = @"liyuhong165@163.com";
lwAccount.pwd = @"123";
lwAccount.registerTime = (MyDate){2001,1,1,22,15,11}; // 將右邊的結(jié)構(gòu)體一一賦值給左邊的結(jié)構(gòu), 如果不強(qiáng)制轉(zhuǎn)換會報錯的,因為結(jié)構(gòu)的初始化值是0
// 2.根據(jù)帳號設(shè)置用戶信息
Author *lwAuthor = [[Author alloc]init];
lwAuthor.name = @"老王";
lwAuthor.icon = @"lw.png";
lwAuthor.vip = YES;
lwAuthor.account = lwAccount;
lwAuthor.birthday = (MyDate){1993,1,1,22,15,11};
// 3.發(fā)布微博
Status *lwStatus = [[Status alloc]init];
lwStatus.text = @"會玩呀";
lwStatus.pricture = @"p.png";
lwStatus.createTime = (MyDate){2001,1,1,22,15,11}; ;
lwStatus.author = lwAuthor;
lwStatus.commoentCount = 100;
lwStatus.retweetCount = 90;
lwStatus.likeCount = 200;
#warning 6-12晚上
// 給王大錘常見帳號/
Account *dcAccount = [[Account alloc]init];
lwAccount.email = @"王大錘";
lwAccount.pwd = @"123";
lwAccount.registerTime = (MyDate){2003,1,1,22,15,11}; // 將右邊的結(jié)構(gòu)體一一賦值給左邊的結(jié)構(gòu), 如果不強(qiáng)制轉(zhuǎn)換會報錯的,因為結(jié)構(gòu)的初始化值是0
// 2.根據(jù)帳號設(shè)置用戶信息
Author *dcAuthor = [[Author alloc]init];
dcAuthor.name = @"老王";
dcAuthor.icon = @"lw.png";
dcAuthor.vip = YES;
dcAuthor.account = dcAuthor;
dcAuthor.birthday = (MyDate){1993,1,1,22,15,11};
// 3.發(fā)布微博
Status *lwStatus_s = [[Status alloc]init];
lwStatus_s.text = @"會玩呀";
lwStatus_s.pricture = @"nil";
lwStatus_s.createTime = (MyDate){2001,1,1,22,15,11}; ;
lwStatus_s.author = dcAuthor;
lwStatus_s.commoentCount = 100;
lwStatus.retweetCount = 90;
lwStatus_s.likeCount = 200;
lwStatus_s.repostStatus = lwStatus;//
[lwStatus release];
[NSData release];
return 0;
}
Account.h //帳號類
// 帳號類
#import <Foundation/Foundation.h>
typedef struct
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}MyDate;
@interface Account : NSObject
//注冊的時間 (registerTime) [如果學(xué)完Foundation框架 最好使用字符串來保持]
@property (nonatomic,assign)MyDate registerTime; // 由于結(jié)構(gòu)體不是對象, 所以直接使用assign即可
//賬號 (email)
@property (nonatomic,retain) NSString *email; // 以后字符串最好用copy
//密碼 (pwd)
@property (nonatomic,retain) NSString *pwd;
@end
Account.m
#import "Account.h"
@implementation Account
- (void)dealloc
{
[_email release];
[_pwd release];
[super dealloc];
}
@end
Account.h //用戶類
// 用戶類
#import <Foundation/Foundation.h>
#import "Account.h"
@interface Author : NSObject
//用戶的昵稱 (name)
@property(nonatomic, retain)NSString *name;
//用戶的頭像 (icon)
@property(nonatomic, retain)NSString *icon;
//用戶的是否是會員 (vip)
@property(nonatomic, assign,getter=isVip) BOOL vip; //如果是BOOL類型,一般情況下重寫getter方法
//用戶對應(yīng)的賬號 (account)
@property (nonatomic, retain)Account *account;
//用戶的生日 (用來做營銷, 到生日的時候 提示或者送一些其他小禮物) (birthday)
@property (nonatomic,assign)MyDate birthday;
@end
Author.m
#import "Author.h"
@implementation Author
-(void)dealloc
{
[_name release];
[_icon release];
[_account release];
[super dealloc];
}
@end
Status.h //微博類
#import <Foundation/Foundation.h>
#import "Author.h"
@interface Status : NSObject
//微博的正文 (text)
@property(nonatomic, retain)NSString *text;
//微博配圖 (pricture) (可能有一張、多張缸榛、高清吝羞、中圖、小圖)(可以抽取為一個類)
@property(nonatomic, retain)NSString *pricture;
//微博的發(fā)布時間 (createTime)
@property (nonatomic,assign)MyDate createTime;
//微博對應(yīng)的作者(用戶)(author)
@property (nonatomic, retain)Author *author;
//評論數(shù) (commoentCount)
@property (nonatomic,assign)int commoentCount;
//轉(zhuǎn)發(fā)數(shù) (retweetCount)
@property (nonatomic,assign)int retweetCount;
//贊數(shù) (likeCount)
@property (nonatomic,assign)int likeCount;
//轉(zhuǎn)發(fā)微博 (repostStatus)
@property (nonatomic,retain)Status *repostStatus;
@end
Status.m
#import "Status.h"
@implementation Status
#warning 系統(tǒng)默認(rèn)的setter實現(xiàn)
- (void)setText:(NSString *)text
{
// 假如上一次的@"abc",
if (_text != text) {
[_text release];
_text = [text retain];
}
}
- (void)dealloc
{
// 屬性是retain的都需要release
/*
[_text release];
_text = nil;
[_pricture release];
_pricture = nil;
[_author release];
_author = nil;
[_repostStatus release];
_repostStatus = nil;
*/
// 下面這句話相當(dāng)于調(diào)用了set方法
// 先release舊值,
self.text = nil;
self.pricture = nil;
[super dealloc];
}
@end