首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

ios协议、分门别类理解

2012-10-26 
ios协议、分类理解一、协议ios中协议虽object-c基础中有讲过,但一直只是表面的认识,今天在做项目时,有了深些

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变量

热点排行