`
wenxin2009
  • 浏览: 321595 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ios协议、分类理解

    博客分类:
  • 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

 

示例二(当请求另一个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应用开发中,商家分类选择是一个常见的功能,主要用于帮助用户快速找到他们感兴趣的商品或服务。这个"IOS 商家分类选择"的demo很可能是展示如何在iOS应用中实现这一功能的实例代码。在这个demo中,我们可以预期...

    ios-协议protocol

    以上是对iOS中协议的基本理解与应用,它们是构建高效、可维护的iOS应用的关键部分。通过熟练掌握协议,开发者可以更好地设计和组织代码,提高代码复用性,同时降低耦合度,提升程序的灵活性。对于初学者来说,理解和...

    iOS常见分类

    在这个"iOS常见分类"的学习资料中,我们将深入探讨这一主题,帮助开发者更好地理解和利用这一工具。 首先,分类允许我们在不改变原有代码结构的情况下,为Objective-C类添加新功能。这对于处理系统提供的原生类,如...

    iOS 协议传值模版

    协议可以包含方法、属性和运算符要求,也可以被分类为objc_object类型,使其能够支持继承。 协议传值通常用于两个场景:一是当一个视图控制器需要将数据传递给另一个视图控制器时;二是当需要在不直接相关的类之间...

    iOS类的分类方法

    在iOS开发中,类别...通过理解并熟练运用这些知识点,开发者可以更高效地进行iOS应用开发,同时保持代码的整洁和可扩展性。在实际项目中,合理使用类别可以使代码结构更加清晰,提升代码复用率,降低维护成本。

    ios-分类筛选.zip

    在iOS开发中,"分类筛选"是一个常见的功能,主要用于帮助用户高效地查找和过滤信息。在给定的“ios-分类筛选.zip...通过学习和理解这些内容,开发者可以掌握在iOS应用中构建高效、易用的分类筛选功能,提升用户满意度。

    iOS 分类菜单栏联动选择界面

    "iOS 分类菜单栏联动选择界面"是一个实现UITableView和UICollectionView联动的示例,它允许用户在一个菜单栏的选择影响到另一个视图的显示,提供了良好的交互体验。下面将详细解释这个项目中的关键知识点。 1. ...

    ios应用源码之分类 2018127

    在iOS应用开发中,源码是开发者理解和控制应用程序运行机制的关键。分类(Category)是Objective-C语言中的一个重要特性,它允许我们为现有的类添加方法,甚至扩展类的行为,而无需继承。在这个“ios应用源码之分类 ...

    ios-比较常用的分类界面.zip

    本项目“ios-比较常用的分类界面.zip”显然关注的是如何将这两种视图有效地结合使用,创建出复杂的分类展示界面。下面我们将深入探讨UITableView与UICollectionView的特性,以及它们在实际应用中的结合策略。 首先...

    ios-分类多选或单选及全选demo.zip

    在iOS开发中,"ios-分类多选或单选及全选demo.zip"是一个示例项目,它专注于实现用户界面中的选择功能。这个项目涵盖了多种选择模式,包括单选、多选以及全选,适用于例如菜单展示、设置选项等场景。下面我们将详细...

    ios-runtime理解和实践.zip

    本资料包"ios-runtime理解和实践.zip"主要探讨Runtime的常用理解和实践。 Runtime系统的核心思想是“一切都是对象”。在Objective-C中,方法调用、消息传递、类别、协议、动态加载等特性都是Runtime支持的。以下是...

    ios-tableView下的三级分类.zip

    在iOS开发中,UITableView是一种非常常见且重要的组件,它用于展示列表数据,用户可以通过滚动查看...开发者需要对UITableView的生命周期、数据源协议以及用户交互有深入理解,才能有效地实现这样一个功能丰富的界面。

    IOS应用源码——分类.rar

    "IOS应用源码——分类.rar"这个压缩包可能包含了一个完整的iOS应用项目,其中“分类”可能是该项目的一个重要组成部分,或者指的是Objective-C或Swift中的分类(Category)概念。在这个源码包中,我们可以深入学习到...

    IOS-使用ijkplayer简单demo

    这个"IOS-使用ijkplayer简单demo"是一个帮助开发者快速理解并集成ijkplayer到iOS项目的实例。下面我们将详细探讨ijkplayer的使用、核心概念以及如何通过提供的VideoDemo来学习ijkplayer的基本操作。 1. **...

    ios-商品列表.zip

    总的来说,"ios-商品列表.zip"项目涵盖了iOS应用开发中的多项关键技术,包括UI组件(UITableView/UICollectionView)、数据模型、数据源协议、网络请求、图片加载、性能优化等。通过对这些知识点的深入理解和实践,...

    ios 进阶 代理模式

    在iOS开发中,代理模式是一种常用的设计模式,它在软件设计中扮演着...通过理解和熟练运用代理模式,开发者可以更高效地构建功能丰富的iOS应用程序。无论是数据源还是委托,代理模式都是iOS开发中不可或缺的一部分。

    上海iOS最新面试题汇总

    3. **Category(分类)**:理解分类的概念,如何使用它来扩展已有类的功能,以及category与方法重载的区别。 4. ** Blocks(块)**:掌握Block的定义、存储类型、捕获变量、循环引用等问题。 5. **GCD(Grand ...

    ios-购物车Demo.zip

    这个"ios-购物车Demo.zip"包含了一个简单的购物车实现示例,旨在帮助开发者理解如何在iOS应用中构建类似的功能。以下将详细介绍该Demo中涉及的关键知识点。 首先,购物车功能的基础是数据结构的设计。在这个Demo中...

    ios-自定义分类视图.zip

    在iOS开发中,自定义分类视图是一种常见的需求,它能帮助我们构建独特且功能丰富的用户界面。"ios-自定义分类视图.zip" 文件很可能包含了一个示例项目,展示了如何在iOS应用中创建和使用自定义的分类视图。在这个...

    介绍Cisco IOS ,Cisco路由器硬件分类

    在IT行业中,Cisco IOS(Internetwork Operating System)是Cisco Systems公司为其网络设备...这些资源将帮助你深入理解Cisco IOS的使用方法以及如何选择适合的Cisco路由器硬件,对于网络工程师来说是宝贵的学习材料。

Global site tag (gtag.js) - Google Analytics