ARC 全稱:Automatic Reference Countingios
使用ARC 只須要在創建一個新的項目的時候把 下面的√打上程序員
Xcode5之後都會默認建議開發者使用ARC機制app
新的項目中若是有部分文件不想使用ARC就 在Build Phases中找到那個文件 後面修改爲-fno-objc-arciphone
就得項目中若是有部分文件想使用ARC就 Build Phases中找到那個文件 後面修改爲-f-objc-arc學習
在使用了ARC開發程序中不能再出現release或者autorelease 不然就報錯ui
源碼:http://www.jinhusns.com/Products/Download/?type=xcjatom
若是想把整個就項目直接轉化成ARC就 點Edit -》Refactor-》Counvert to OC ARCspa
1.ARC特色指針
1> 不容許調用release、retain、retainCountcode
2> 容許重寫dealloc,可是不容許調用[super dealloc]
3> ARC的判斷準則:只要沒有強指針指向對象,就會釋放對象
2 @property的參數
* strong :成員變量是強指針(適用於OC對象類型)
* weak :成員變量是弱指針(適用於OC對象類型)
* assign : 適用於非OC對象類型
* 之前的retain改成用strong
指針分2種:
1> 強指針:默認狀況下,全部的指針都是強指針 __strong
2> 弱指針:__weak
// *錯誤寫法(沒有意義的寫法)
__weak Person *p = [[Person alloc] init];
// *循環引用時的解決方法
一端改爲strong 一端改爲retain
在學習了ARC的知識以後 發現代碼又再次精簡了許多,徹底不用管內存管理裏的事了,就像MJ老師說的蘋果 想讓程序員的100%的經歷 都放在業務上而不是抽出50%放在內存管理上。 代碼有五個時段
時段一:剛開始是全部set和get都要本身寫,內存管理所有本身寫。
時段二:有了@property自動生成聲明 和 @synthesize自動生成實現
時段三:@property包含了 自動聲明實現的功能 只寫這一個就夠了
時段四:出了autorelease ,不用再關心release 和 程序中的代碼的前後關係了,有了自動緩衝池@autorelesepool,只要寫了autorelease 它會在程序代碼塊以後自動所有釋放。
時段五:有了ARC以後什麼都無論了。
而後老師講了一個創建一個模型創建的是 新浪微博轉發狀態的模型,我在看懂以後本身也嘗試着創建了一個模型
是品牌下有本身的產品 一個品牌的產品能夠加工另外一個公司的產品
我創建的是一個是富士康公司生產出手機值900元 而後蘋果加工後就成了iphone值5688元
下面是代碼
main.m
//
// main.m
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Brand.h"
#import "Product.h"
int main()
{
// 創立一個蘋果公司
Brand *b1 = [[Brand alloc]init];
b1.name = @"apple";
// 創立一個富士康公司
Brand *b2 = [[Brand alloc]init];
b2.name = @"fushikang";
// 富士康生產一個手機啊
Product *p1 = [[Product alloc]init];
p1.name = @"phone";
p1.price = 900.00;
p1.brand = b2;
// 蘋果以那個爲原材料加工一下
Product *p2 = [[Product alloc]init];
p2.name = @"iphone";
p2.RawProduct = p1;
p2.price = 5688.88;
p2.brand = b1;
return 0;
}
Brand.h // 品牌類
//
// Brand.h
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef struct {
int year;
int month;
int day;
} Date;
@interface Brand : NSObject
// 創建品牌的名稱
@property (nonatomic, strong) NSString *Name;
// 創建這個品牌的創立時間
@property (nonatomic, assign) Date SinceTime;
// 創建一個品牌Logo 存放資源的URL
@property (nonatomic, strong) NSString *Logo;
// 創建一個總部電話 用字符串存儲
@property (nonatomic, strong) NSString *Centerphone;
// 此品牌旗下的產品數量
@property (nonatomic, assign) int OwnProductNumber;
@end
Product.h //產品類
//
// Product.h
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Brand;
@interface Product : NSObject
// 產品的名稱
@property (nonatomic, strong) NSString *Name;
// 產品的效果圖
@property (nonatomic, strong) NSString *Photo;
// 產品所屬公司
@property (nonatomic, strong) Brand *brand;
// 產品的原材料
@property (nonatomic, strong) Product *RawProduct;
// 產品的價格
@property (nonatomic, assign) double price;
@end
而後 Brand.m 和 Product.m 都是自動生成的裏面代碼沒啥意義就不發了。
ARC的功能很強大,咱們這批學ios的程序員是遇上好時候了啊,估計蘋果之後還會出各式各樣的方便自動生成的方法。一塊兒期待吧。