ios协议、分类理解
一、协议
ios中协议虽object-c基础中有讲过,但一直只是表面的认识,今天在做项目时,有了深些的认识。在请求网络数据并解析xml时协议就体现出它的价值了。解析数据后,最后会通过协议进行加载解析后的数据。
下面以例子说明:
1、声明协议
@protocol updateSearchDataDelegate <NSObject>
-(void)loadDataForShow;
@end
@interface AuctionDetailXmlParser : NSObject<NSXMLParserDelegate,ASIHTTPRequestDelegate>
//定义协议
@property (strong,nonatomic) id<updateSearchDataDelegate>?? delegate;
? ........
@end
?
可以用协议delegate调用loadDataForShow方法。
?
2、当其它类引入协议时,则需要实现协议里面的方法。
@interface AuctionDetailsViewController : UITableViewController<updateSearchDataDelegate>
......
@end
?
@implementation AuctionDetailsViewController
- (void)getAuctionDetails{
??? auctionDetailXmpParser = [[AuctionDetailXmlParser alloc] init];
?? //设置代理,只有设置协议才会调用协议中方法
??? auctionDetailXmpParser.delegate = self;
??? [auctionDetailXmpParser getAuctionDetails:strXml Action:actionName];
??????
}
?
- (void)loadDataForShow{
? ........
}
?
@end
?
二、分类
分类是对类的扩展,当类较大时,想扩展新的方法时,可采用分类进行处理。分类中不能定义变量,只能定义方法。分类可以访问原始类的变量和方法。分类命名规则以+分隔
?
示例代码:
?
#import <UIKit/UIKit.h>#import "AppDelegate.h"#import "Test+TestCategory.h"int main(int argc, char *argv[]){ Test *test = [[Test alloc] init]; [test test]; [test testCategory]; @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}//输出结果//2012-10-18 18:23:03.377 Test102[33019:f803] test.........//2012-10-18 18:23:03.381 Test102[33019:f803] test.........//2012-10-18 18:23:03.390 Test102[33019:f803] testCategory........a变量