學習IOS開發的第5天

今天學習了協議,協議類似於java裏的接口,裏面是方法的聲明,沒有實現,就像java中的抽象方法。協議用@protocol聲明,一個類要遵循一個協議,必須實現裏面用@required修飾或者沒有修飾的方法,用@optional修飾的方法可以選擇性地實現。我定義了一個CarSafe汽車安全協議,要實現這個協議,必須實現裏面的brake剎車方法。例如
//汽車安全協議
@protocol CarSafe <NSObject>

@required
//剎車
-(void)brake;

@end
然後新建了一個BYD類繼承Car類,同時BYD遵循CarSafe協議,所以它的聲明文件這樣寫
//遵循汽車安全協議
@interface BYD : Car <CarSafe>

@end
然後在BYD的實現中,實現協議裏的brake方法
#import "BYD.h"

@implementation BYD
//實現協議裏的方法
-(void)brake{
    NSLog(@"汽車剎車");
}
@end
這樣就實現了一個協議,假使我們需要一個實現該協議的實例,就可直接創建實現的該協議的類的實例。
        id<CarSafe> thing = [[BYD alloc] init];
        [thing brake];

總之,oc中的協議類似於java中的接口,比類更爲抽象,使用協議可以降低程序間的耦合。

oc編程中常用的代理設計模式就是基於協議的。

除此之外,我還學習了內存管理。oc中有引用計數,每次創建或保存對象,它的引用計數都會+1,如涉及alloc、copy、retain時,引用計數都會+1。每次調用release方法只能讓引用計數-1,當引用計數爲0時,纔會銷燬對象。當我們把程序寫到自動釋放池裏時,自動釋放池釋放時,只會向每個對象發送一次release方法,所以在程序中引用次數大於1時,還得在具體的位置手動調用release方法。

總而言之,如果創建一個對象使用了alloc、copy、retain,那麼你就有義務向這個對象發送一條release或autorelease消息。

如果你不想手動管理內存,可以在創建工程時選擇使用ARC,讓程序幫你管理內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章