`
dingran
  • 浏览: 376622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios的categories概念Demo

 
阅读更多

         JAVA里面要想给类增加个方法,必须继承才行,要想改变方法需要覆盖,感觉总有不能办到的,而且也麻烦。

ios的 Categories真是让我打开眼界啊!直接就可以给FrameWork的类增加函数,且可以修改。牛逼啊,即使是不开源又能怎地,就是封装的好啊,好用就行了呗。要是研究OS还是去找Android吧。

         以下内容是copy的:http://mobile.51cto.com/hot-232833_8.htm

 

        当然他也是翻译的,我们可以直接看最原始的文章风格也非常漂亮的:http://cocoadevcentral.com/d/learn_objectivec/

 

         Categories是Objective-C里面最常用到的功能之一。 基本上category可以让我们给已经存在的类增加方法,而不需要增加一个子类。而且不需要知道它内部具体的实现。

如果我们想增加某个framework自带的类的方法,这非常有效。如果我们想在我们程序工程的NSString能够增加一个方法,我们就可以使用category。甚至都不需要自己实现一个NSString的子类。

比如,我们想在NSString里面增加一个方法来判断它是否是一个URL,那我们就可以这么做:

 

 

@interface NSString (NSString_Utils)

 

- (BOOL ) isUrl;

 

@end

 

这跟类的定义非常类似。区别就是category没有父类,而且在括号里面要有category的名字。名字可以随便取,但是习惯叫法会让人比较明白category里面有些什么功能的方法。

这里是具体的实现。但是要注意,这本身并不是一个判断URL很好的实现。我们主要是为了整体的了解category的概念。

 

 

 

#import "NSObject+NSString_Utils.h"

 

@implementation NSObject (NSString_Utils)

 

- (BOOL ) isUrl

{

    if ([self hasPrefix :@"http://" ]) {

        return YES ;

    }    

    return NO;

}

 

 

@end


 

 

 

现在我们可以在任何的NSString类对象里都可以调用这个方法了。下面的代码在console里面打印的"string1 is a URL":

 

 

 

- (void )viewDidLoad

{

    [ super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

 

    NSString *string1 = @"http://www.apple.com";

 

    if ([string1 isUrl ]) {

        NSLog ( @"string1 is a URL");

    }

 

    NSString *string2 = @"hahha" ;

 

    if ([string2 isUrl ]) {

        NSLog ( @"string1 is a URL");

    }

 

 

}


跟子类不一样,category不能增加成员变量。我们还可以用category来重写类原先的存在的方法,但是这需要非常非常小心。

记住,当我们通过category来修改一个类的时候,它对应用程序里的这个类所有对象都起作用。

 

 

输出结果:

 

 

string1 is a URL


分享到:
评论

相关推荐

    ios demo,自定义一个类,接口interface和implementation

    这个“ios demo”项目专注于类的接口(interface)和实现(implementation),这是Objective-C编程中的核心概念。Objective-C是苹果平台上的主要编程语言,它在C语言的基础上添加了面向对象特性,通过消息传递机制来...

    iOS本地通知代码-UILocalNotification_Demo

    这个"iOS本地通知代码-UILocalNotification_Demo"压缩包文件应该包含一个示例项目,演示了如何在iOS应用中设置和使用本地通知。 本地通知的主要用途是提升用户体验,例如提醒用户有新的消息、事件或者需要完成的...

    iOSDemo

    "iOSDemo"项目很可能是用Objective-C编写的一个示例应用,用于展示如何在iOS设备上构建和运行应用程序。下面将详细讨论Objective-C语言的关键特性和在iOS开发中的应用。 Objective-C是在C语言基础上扩展的一种面向...

    极光推送demo - 3.0.5

    channel)`,而在iOS的AppDelegate.m中则需调用`[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil];...

    百度推送demo

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]; [...

    【WordPress插件】2022年最新版完整功能demo+插件v2.5.4.zip

    "【WordPress插件】2022年最新版完整功能demo+插件v2.5.4 Barn2 Media WooCommerce Protected Categories Barn2 Media Woocommerce保护类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress...

    【WordPress插件】2022年最新版完整功能demo+插件v1.2.1.zip

    "【WordPress插件】2022年最新版完整功能demo+插件v1.2.1 Ultimate WooCommerce Expandable Categories 终极Woocommerce可扩展类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、...

    【WordPress插件】2022年最新版完整功能demo+插件v2.1.4.zip

    "【WordPress插件】2022年最新版完整功能demo+插件v2.1.4 Barn2 Media Password Protected Categories Barn2媒体密码保护类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify...

    【WordPress插件】2022年最新版完整功能demo+插件v1.5.13.zip

    "【WordPress插件】2022年最新版完整功能demo+插件v1.5.13 WP Sheet Editor - Categories and Tags Pro WP表编辑器 - 类别和标签Pro" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、...

    objc代码-first objc demo

    【objc代码-first objc demo】是一个面向初学者的Objective-C编程示例项目,旨在帮助学习者通过实际编写代码来理解Objective-C的基本概念和语法。在这个项目中,`main.objc`是主程序文件,包含了Objective-C程序的...

    CustomCategory:日常总结 个人收集demo

    在iOS开发中,Category是一种强大的工具,用于扩展已有的Objective-C类的功能,而无需继承。本文将深入探讨Category的概念、用途以及如何在实际项目中应用,以提升代码的复用性和模块化。Title "CustomCategory:日常...

    在Objective-C中使用C++

    在Objective-C中使用C++是iOS和Mac开发中常见的技术结合,因为Objective-C是...cpp_demo可能是示例代码,用于演示如何在实践中实现这些概念。通过研究这个示例,你可以更深入地理解如何在实际项目中整合这两种语言。

    TMS Pack for FireMonkey2.3.0.1

    Fixed : Issue compiling demo's in trial version Fixed : Issue with LoadFromFile column widths in TTMSFMXGrid v2.1.0.2 Improved : GetTextHeight function in TTMSFMXHTMLText Fixed : Issue with iOS ...

    Android 两级下拉列表实现

    本篇文章将详细讲解如何利用Android的Spinner组件实现一个两级下拉列表的Demo。 首先,`Spinner`是Android SDK提供的一种控件,它允许用户在一组选项中进行选择,并在默认状态下显示其中一个选项。它通常用于节省...

    BasicUserNotification.m

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge| UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]; [application...

    KNONAC.zip_Windows编程_Objective-C_

    在“Knonac公司照度计T-10 Demo”中,我们可能会发现Objective-C被用来创建一个Windows上的应用示例,这可能是为了展示如何在非苹果平台上利用Objective-C进行跨平台开发。照度计应用可能涉及到图形用户界面的构建,...

Global site tag (gtag.js) - Google Analytics