一、协议
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
示例二(当请求另一个viewController时,通过协议可不通过new来请求该viewController方法 ):
#import <UIKit/UIKit.h> #import "RequestVO.h" //协议 @protocol sortDataDelegate<NSObject> @required - (void) loadDataShow : (RequestVO *)requestParams; @end @interface SortViewController : UITableViewController @property (strong,nonatomic) id<sortDataDelegate> delegate; @end
// // SortViewController.m // BookReader // // Created by Dwen on 13-1-29. // // #import "SortViewController.h" #import "Utils.h" @interface SortViewController () @end @implementation SortViewController @synthesize popover,sortArry; @synthesize sortStr; @synthesize specialCode; @synthesize delegate; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { sortArry = [[NSMutableArray alloc] initWithObjects:CLOSE_COST_ASC,CLOSE_COST_DESC,LOT_ASC,LOT_DESC, nil]; } return self; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 4; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.textLabel.text =@"test"; cell.textLabel.font = [UIFont fontWithName:@"Arial" size:18]; return cell; } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { RequestVO *requestVO = [[RequestVO alloc] init]; [delegate loadDataShow:requestVO];//****代理方法解决调用Controller问题 } @end
#import <UIKit/UIKit.h> @interface CatalogViewController : UIViewController<sortDataDelegate> @end @interface CatalogViewController () @end @implementation CatalogViewController //排序 - (IBAction)sortAction:(id)sender { sortVC = [[SortViewController alloc] initWithStyle:UITableViewStylePlain]; sortVC.contentSizeForViewInPopover = CGSizeMake(240, 176); popover = [[UIPopoverController alloc] initWithContentViewController:sortVC]; [popover presentPopoverFromRect:[self.sortBtn bounds] inView:self.sortBtn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; sortVC.delegate = self;//****该delegate一定要设 } - (void)loadDataShow:(RequestVO *)requestParams{ } @end
二、分类
分类是对类的扩展,当类较大时,想扩展新的方法时,可采用分类进行处理。分类中不能定义变量,只能定义方法。分类可以访问原始类的变量和方法。分类命名规则以+分隔
示例代码:
#import <Foundation/Foundation.h> @interface Test : NSObject @property (strong , nonatomic) NSString *a; - (void) test; @end
#import "Test.h" @interface Test () @end @implementation Test @synthesize a; - (void) test{ a = @"a变量"; NSLog(@"test........."); }
Test+TestCategory.h
#import "Test.h" @interface Test (TestCategory) - (void) testCategory; @end
Test+TestCategory.m
#import "Test+TestCategory.h" @implementation Test (TestCategory) - (void) testCategory{ [self test]; NSLog(@"testCategory........%@",self.a); } @end
main方法调用:
#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变量
相关推荐
在iOS应用开发中,商家分类选择是一个常见的功能,主要用于帮助用户快速找到他们感兴趣的商品或服务。这个"IOS 商家分类选择"的demo很可能是展示如何在iOS应用中实现这一功能的实例代码。在这个demo中,我们可以预期...
以上是对iOS中协议的基本理解与应用,它们是构建高效、可维护的iOS应用的关键部分。通过熟练掌握协议,开发者可以更好地设计和组织代码,提高代码复用性,同时降低耦合度,提升程序的灵活性。对于初学者来说,理解和...
在这个"iOS常见分类"的学习资料中,我们将深入探讨这一主题,帮助开发者更好地理解和利用这一工具。 首先,分类允许我们在不改变原有代码结构的情况下,为Objective-C类添加新功能。这对于处理系统提供的原生类,如...
协议可以包含方法、属性和运算符要求,也可以被分类为objc_object类型,使其能够支持继承。 协议传值通常用于两个场景:一是当一个视图控制器需要将数据传递给另一个视图控制器时;二是当需要在不直接相关的类之间...
在iOS开发中,类别...通过理解并熟练运用这些知识点,开发者可以更高效地进行iOS应用开发,同时保持代码的整洁和可扩展性。在实际项目中,合理使用类别可以使代码结构更加清晰,提升代码复用率,降低维护成本。
在iOS开发中,"分类筛选"是一个常见的功能,主要用于帮助用户高效地查找和过滤信息。在给定的“ios-分类筛选.zip...通过学习和理解这些内容,开发者可以掌握在iOS应用中构建高效、易用的分类筛选功能,提升用户满意度。
"iOS 分类菜单栏联动选择界面"是一个实现UITableView和UICollectionView联动的示例,它允许用户在一个菜单栏的选择影响到另一个视图的显示,提供了良好的交互体验。下面将详细解释这个项目中的关键知识点。 1. ...
在iOS应用开发中,源码是开发者理解和控制应用程序运行机制的关键。分类(Category)是Objective-C语言中的一个重要特性,它允许我们为现有的类添加方法,甚至扩展类的行为,而无需继承。在这个“ios应用源码之分类 ...
本项目“ios-比较常用的分类界面.zip”显然关注的是如何将这两种视图有效地结合使用,创建出复杂的分类展示界面。下面我们将深入探讨UITableView与UICollectionView的特性,以及它们在实际应用中的结合策略。 首先...
在iOS开发中,"ios-分类多选或单选及全选demo.zip"是一个示例项目,它专注于实现用户界面中的选择功能。这个项目涵盖了多种选择模式,包括单选、多选以及全选,适用于例如菜单展示、设置选项等场景。下面我们将详细...
本资料包"ios-runtime理解和实践.zip"主要探讨Runtime的常用理解和实践。 Runtime系统的核心思想是“一切都是对象”。在Objective-C中,方法调用、消息传递、类别、协议、动态加载等特性都是Runtime支持的。以下是...
在iOS开发中,UITableView是一种非常常见且重要的组件,它用于展示列表数据,用户可以通过滚动查看...开发者需要对UITableView的生命周期、数据源协议以及用户交互有深入理解,才能有效地实现这样一个功能丰富的界面。
"IOS应用源码——分类.rar"这个压缩包可能包含了一个完整的iOS应用项目,其中“分类”可能是该项目的一个重要组成部分,或者指的是Objective-C或Swift中的分类(Category)概念。在这个源码包中,我们可以深入学习到...
这个"IOS-使用ijkplayer简单demo"是一个帮助开发者快速理解并集成ijkplayer到iOS项目的实例。下面我们将详细探讨ijkplayer的使用、核心概念以及如何通过提供的VideoDemo来学习ijkplayer的基本操作。 1. **...
总的来说,"ios-商品列表.zip"项目涵盖了iOS应用开发中的多项关键技术,包括UI组件(UITableView/UICollectionView)、数据模型、数据源协议、网络请求、图片加载、性能优化等。通过对这些知识点的深入理解和实践,...
在iOS开发中,代理模式是一种常用的设计模式,它在软件设计中扮演着...通过理解和熟练运用代理模式,开发者可以更高效地构建功能丰富的iOS应用程序。无论是数据源还是委托,代理模式都是iOS开发中不可或缺的一部分。
3. **Category(分类)**:理解分类的概念,如何使用它来扩展已有类的功能,以及category与方法重载的区别。 4. ** Blocks(块)**:掌握Block的定义、存储类型、捕获变量、循环引用等问题。 5. **GCD(Grand ...
这个"ios-购物车Demo.zip"包含了一个简单的购物车实现示例,旨在帮助开发者理解如何在iOS应用中构建类似的功能。以下将详细介绍该Demo中涉及的关键知识点。 首先,购物车功能的基础是数据结构的设计。在这个Demo中...
在iOS开发中,自定义分类视图是一种常见的需求,它能帮助我们构建独特且功能丰富的用户界面。"ios-自定义分类视图.zip" 文件很可能包含了一个示例项目,展示了如何在iOS应用中创建和使用自定义的分类视图。在这个...
在IT行业中,Cisco IOS(Internetwork Operating System)是Cisco Systems公司为其网络设备...这些资源将帮助你深入理解Cisco IOS的使用方法以及如何选择适合的Cisco路由器硬件,对于网络工程师来说是宝贵的学习材料。