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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)

發布時間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在c++中我們可以多繼承來實現代碼復用和封裝使程序更加簡練。在objective-c中只能單繼承,不能多繼承,那么除了協議protocol之外,我們可以實現類似多繼承的一個方法就是,分類(category,又稱類別)。類別可以不修改原來的類(父類),和派生類的情況下,為原有的類增加新的方法,但是分類不能增加實例變量。

格式(format):

@interface class_name(category_name)<protocol,....>

method _declaration;

....

@end

@implementation?class_name(category_name)

method_implementation;

...

@end

新建一個AddressCard類,然后再新建一個文件?AddressCardCategory?用來聲明和實現分類(category)

1 #import <Foundation/Foundation.h> 2 3 @interface AddressCard : NSObject<NSCoding>{ 4 NSString* name; 5 NSString* email; 6 } 7 @property (nonatomic,retain)NSString* name; 8 @property (nonatomic,retain)NSString* email; 9 -(id)initWithName:(NSString*)_name andEmail:(NSString*)_email; 10 11 @end

?

1 #import "AddressCard.h" 2 3 @implementation AddressCard 4 @synthesize name,email; 5 -(id)initWithName:(NSString*)_name andEmail:(NSString*)_email{ 6 if(self= [super init]) 7 { 8 self.name=_name; 9 self.email=_email; 10 } 11 return self; 12 } 13 -(void)encodeWithCoder:(NSCoder *)aCoder{ 14 [aCoder encodeObject:name forKey:@"_name"]; 15 [aCoder encodeObject:email forKey:@"_email"]; 16 } 17 18 -(id)initWithCoder:(NSCoder*)aDecoder{ 19 if(self=[super init]) 20 { 21 self.name=[aDecoder decodeObjectForKey:@"_name"]; 22 self.email=[aDecoder decodeObjectForKey:@"_email"]; 23 } 24 return self; 25 } 26 -(void)dealloc{ 27 [name release]; 28 [email release]; 29 [super dealloc]; 30 } 31 @end

?

#import <Foundation/Foundation.h> #import "AddressCard.h" @interface AddressCard(category) -(void)uppercaseName;@end

?

1 #import "AddressCardCategory.h" 2 3 @implementation AddressCard(Category) 4 -(void)uppercaseName{ 5 self.name= [name uppercaseString]; 6 } 7 8 @end 1 #import <Foundation/Foundation.h> 2 #import "AddressCardCategory.h" 3 int main (int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 AddressCard* card1=[[AddressCard alloc]initWithName:@"shou" andEmail:@"abc@126.com"]; 8 [NSKeyedArchiver archiveRootObject:card1 toFile:@"/tmp/AddressCard.txt"]; 9 AddressCard* card4=[NSKeyedUnarchiver unarchiveObjectWithFile:@"/tmp/AddressCard.txt"]; 10 NSLog(@"card 4 %@ ,%@",card4.name,card4.email); 11 [card4 uppercaseName]; 12 NSLog(@"card 4 %@ ,%@",card4.name,card4.email); 13 [card1 release]; 14 //[card4 release]; 15 16 17 } 18 return 0; 19 }

執行結果:

2013-08-20 17:12:04.751 AddressCard[1079:707] card 4 shou ,abc@126.com
2013-08-20 17:12:04.758 AddressCard[1079:707] card 4 SHOU ,abc@126.com


《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的[置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。