iOS 非ARC基本記憶體管理系列總結6 -設計微博模型

來源:互聯網
上載者:User

設計簡單的微博模型:用User類和Status類來類比實現 在非ARC機制下有兩種方式,兩者沒有太大的區別之所以寫了兩種只是為了方便學習和對比兩種寫法!   第一種:沒有使用atuorelease和自動釋放池代碼容易理解,但是開發中一般不這麼寫: 複製代碼/****************************** User.h檔案 **************************************/ /*    設計微博使用者模型:    姓名、微博號碼、密碼、頭像、性別、手機、生日 */#import <Foundation/Foundation.h> // 枚舉和結構體不用關心記憶體問題 typedef enum {    SexMan, // 男    SexWoman // 女} Sex; typedef struct {    int year;    int month;    int day;} Date; @interface User : NSObject// 使用者姓名@property (nonatomic, retain) NSString *name;// 微博帳號@property (nonatomic, retain) NSString *account;// 微博密碼@property (nonatomic, retain) NSString *password;// 帳戶圖片圖片 設定為圖片地址URL 比如: http://weibo.com/a.png@property (nonatomic, retain) NSString *icon;// 使用者性別@property (nonatomic, assign) Sex sex;// 使用者手機@property (nonatomic, retain) NSString *phone;// 使用者生日@property (nonatomic, assign) Date birthday; @end  /****************************** User.m檔案 **************************************/#import "User.h" @implementation User - (void)dealloc{    NSLog(@"User對象在釋放之前先釋放User對象引用的對象"); // 也可以理解為在User類中聲明的retain類型在User類銷毀後要全部銷毀    [_name release];    [_account release];    [_icon release];    [_password release];    [_phone release];        [super dealloc];}@end  /****************************** Status.h檔案 ***********************************/ /* 設計微博模型: 微博內容、微博配圖、發送時間、微博發送人、轉寄的微博、被評論數、被轉寄次數 */#import <Foundation/Foundation.h>#import "User.h" @interface Status : NSObject// 微博內容@property (nonatomic, retain) NSString *text;// 微博配圖 存放圖片地址@property (nonatomic, retain) NSString *icon;// 發送時間 電腦是從1970-01-01 00:00:00 開始計算到現在,一共度過了多少毫秒@property (nonatomic, assign) long time;// @property (nonatomic) time_t time; 時間也可以用這個// 微博發送人@property (nonatomic, retain) User *user;// 轉寄的微博 依據物件導向的思想:將自己的類也封裝成屬性呢@property (nonatomic, retain) Status *retweetStatus;// 被評論數@property (nonatomic, assign) int commentsCount;// 被轉寄次數@property (nonatomic, assign) int retweetsCount; @end  /****************************** Status.m檔案 ***********************************/#import "Status.h" @implementation Status - (void)dealloc{    NSLog(@"Status對象在釋放之前先釋放Status對象引用的對象");    [_text release];    [_user release];    [_retweetStatus release];    [_icon release];    [super dealloc];}@end  /****************************** main.m檔案 ***********************************/#import <Foundation/Foundation.h>#import "User.h"#import "Status.h" int main(){        // 建立兩個使用者 並設定使用者姓名    User *user1 = [[User alloc] init];    user1.name = @"張三";        User *user2 = [[User alloc] init];    user2.name = @"李斯";        // 建立兩條微博 並設定微博的屬性    Status *status1 = [[Status alloc] init];    status1.user = user1; // 這條微博是user1發出的    status1.text = @"今天真高興呀!";     Status *status2 = [[Status alloc] init];    status2.user = user2; // 這條微博是user2發出的    status2.text = @"非ARC基本掌握了!";    status2.retweetStatus = status1; // user2使用者在發出微博後又轉寄了條微博        [status2 release];    [status1 release];    [user2 release];    [user1 release];        return 0;}複製代碼     第二種:使用atuorelease和自動釋放池,在開發中建議的寫法   複製代碼/****************************** User.h檔案 **************************************/ /*    設計微博使用者模型:    姓名、微博號碼、密碼、頭像、性別、手機、生日 */#import <Foundation/Foundation.h> // 枚舉和結構體不用關心記憶體問題 typedef enum {    SexMan, // 男    SexWoman // 女} Sex; typedef struct {    int year;    int month;    int day;} Date; @interface User : NSObject// 使用者姓名@property (nonatomic, retain) NSString *name;// 微博帳號@property (nonatomic, retain) NSString *account;// 微博密碼@property (nonatomic, retain) NSString *password;// 帳戶圖片圖片 設定為圖片地址URL 比如: http://weibo.com/a.png@property (nonatomic, retain) NSString *icon;// 使用者性別@property (nonatomic, assign) Sex sex;// 使用者手機@property (nonatomic, retain) NSString *phone;// 使用者生日@property (nonatomic, assign) Date birthday; + (instancetype)user; @end /****************************** User.m檔案 **************************************/#import "User.h" @implementation User + (instancetype)user{    return [[[self alloc] init] autorelease];    } - (void)dealloc{    NSLog(@"User對象在釋放之前先釋放User對象引用的對象");    [_name release];    [_account release];    [_icon release];    [_password release];    [_phone release];        [super dealloc];}@end /****************************** User.m檔案 **************************************/#import "User.h" @implementation User + (instancetype)user{    return [[[self alloc] init] autorelease];    } - (void)dealloc{    NSLog(@"User對象在釋放之前先釋放User對象引用的對象");    [_name release];    [_account release];    [_icon release];    [_password release];    [_phone release];        [super dealloc];}@end  /****************************** User.m檔案 **************************************/#import "User.h" @implementation User + (instancetype)user{    return [[[self alloc] init] autorelease];    } - (void)dealloc{    NSLog(@"User對象在釋放之前先釋放User對象引用的對象");    [_name release];    [_account release];    [_icon release];    [_password release];    [_phone release];        [super dealloc];}@end /****************************** main.m檔案 ***********************************/#import <Foundation/Foundation.h>#import "User.h"#import "Status.h" int main(){        @autoreleasepool {                // 建立2個使用者        User *user1 = [User user];        user1.name = @"張三"; // NSString內部已經做好了封裝不用關心記憶體 只是需要在引用的時候做次釋放        User *user2 = [User user];        user2.name = @"李斯";                // 建立2條微博        Status *status1 = [Status status];        status1.text = @"今天真高興呀!";        status1.user = user1;                Status *status2 = [Status status];        status2.text = @"非ARC基本掌握了!";        status2.retweetStatus = status1;        status2.user = user2;    }        return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.