日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

objective-c 类目(Category)和延展(Extension)

發(fā)布時間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 objective-c 类目(Category)和延展(Extension) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

類目的基本概念:

如果有封裝好的一個類,隨著程序功能的增加,需要在類中增加一個方法,那我們就不必在那個類中做修改或者再定義一個子類,只需要在用到那個方法時添加一個該類的類目即可.

1.在類目定義的方法中,會成為原始類的一部分,與其他方法的調用沒有區(qū)別

2.通過給父類定義類目方法,其子類也會繼承這些方法.如果子類添加類目方法,父類則不會擁有子類的類目方法.

類目方法的應用:

對現(xiàn)有類的擴展:在類目中增加的方法會被子類所繼承,而且運行時跟其他的方法沒有區(qū)別

作為子類的替代手段:不需要定義和使用一個子類,你可以通過類目直接向已有的類里增加方法

對類中的方法歸類:利用category把一個龐大的類劃分為小塊來分別進行開發(fā),從而更好的對類中的方法進行更新和維護

類目方法的局限性:

無法向類目中,添加新的實例變量,類目沒有位置來容納實例變量,如果想增加類的實例變量,只能通過自定義子類的方式

若在類目中覆蓋現(xiàn)有類的方法,這樣會引起super消息的斷裂,因為類目中的方法具有更高優(yōu)先級,一般不要覆蓋現(xiàn)有類中的方法

類目的命名與用法:

類目的命名規(guī)則:類名+擴展方法(在創(chuàng)建的時候,系統(tǒng)會自動填寫類名,自己只需要寫方法名稱就好)

類目的接口聲明與類的定義十分相似,但類目不繼承父類,只需要帶有一個括號,表明該類目的主要用途

?

延展的基本概念:

類的延展就如同匿名的類目,延展中聲明的方法在類本身的@implementation和對應的@end之間實現(xiàn)

類有時需要方法只有自己所見,我們可以通過延展的方式定義類的私有方法

?

類目的實現(xiàn)可以通過創(chuàng)建一個類目來實現(xiàn),當然我們也可以直接在要添加的類中的.h直接寫入類目

?

示例代碼:

Computer.h

#import <Foundation/Foundation.h>@interface Computer : NSObject@property(nonatomic,copy)NSString *name;@end@interface Computer (printf) //直接添加了類目 -(void)printf;@end//可以在.h中創(chuàng)建多個類目 /*@interface <#class name#> (<#category name#>)@end*/

Computer.m

#import "Computer.h" //延展 //在這里寫私有的方法和變量,當然方法可以直接寫到@implementation中,但是在這里寫了后方便日后的查找 @interface Computer ()@end
@implementation Computer-(id)init{if (self = [super init]) {_name = [[NSString alloc]init];}return self; }@end@implementation Computer (printf)-(void)printf{NSLog(@"%@",_name); }@end

Computer+Creation.h

#import "Computer.h"@interface Computer (Creation)-(void)state;@end

Computer+Creation.m

#import "Computer+Creation.h"@implementation Computer (Creation)-(void)state{NSLog(@"游戲中"); } @end

main.m

#import <Foundation/Foundation.h> #import "Computer.h" #import "Computer+Creation.h" int main(int argc, const char * argv[]) {@autoreleasepool {// insert code here...NSLog(@"Hello, World!");Computer *computer = [[Computer alloc]init];[computer state];computer.name = @"mac";[computer printf];}return 0; }

輸出結果:

2013-12-31 11:50:29.514 類目和延展[1378:303] Hello, World! 2013-12-31 11:50:29.515 類目和延展[1378:303] 游戲中 2013-12-31 11:50:29.516 類目和延展[1378:303] mac

?

?

明天復習下協(xié)議和代理,把基本概念搞清楚

?

轉載于:https://www.cnblogs.com/mo-shou/p/3499084.html

總結

以上是生活随笔為你收集整理的objective-c 类目(Category)和延展(Extension)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。