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),这是Objective-C编程中的核心概念。Objective-C是苹果平台上的主要编程语言,它在C语言的基础上添加了面向对象特性,通过消息传递机制来...
这个"iOS本地通知代码-UILocalNotification_Demo"压缩包文件应该包含一个示例项目,演示了如何在iOS应用中设置和使用本地通知。 本地通知的主要用途是提升用户体验,例如提醒用户有新的消息、事件或者需要完成的...
"iOSDemo"项目很可能是用Objective-C编写的一个示例应用,用于展示如何在iOS设备上构建和运行应用程序。下面将详细讨论Objective-C语言的关键特性和在iOS开发中的应用。 Objective-C是在C语言基础上扩展的一种面向...
channel)`,而在iOS的AppDelegate.m中则需调用`[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil];...
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]; [...
"【WordPress插件】2022年最新版完整功能demo+插件v2.5.4 Barn2 Media WooCommerce Protected Categories Barn2 Media Woocommerce保护类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress...
"【WordPress插件】2022年最新版完整功能demo+插件v1.2.1 Ultimate WooCommerce Expandable Categories 终极Woocommerce可扩展类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、...
"【WordPress插件】2022年最新版完整功能demo+插件v2.1.4 Barn2 Media Password Protected Categories Barn2媒体密码保护类别" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify...
"【WordPress插件】2022年最新版完整功能demo+插件v1.5.13 WP Sheet Editor - Categories and Tags Pro WP表编辑器 - 类别和标签Pro" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、...
【objc代码-first objc demo】是一个面向初学者的Objective-C编程示例项目,旨在帮助学习者通过实际编写代码来理解Objective-C的基本概念和语法。在这个项目中,`main.objc`是主程序文件,包含了Objective-C程序的...
在iOS开发中,Category是一种强大的工具,用于扩展已有的Objective-C类的功能,而无需继承。本文将深入探讨Category的概念、用途以及如何在实际项目中应用,以提升代码的复用性和模块化。Title "CustomCategory:日常...
在Objective-C中使用C++是iOS和Mac开发中常见的技术结合,因为Objective-C是...cpp_demo可能是示例代码,用于演示如何在实践中实现这些概念。通过研究这个示例,你可以更深入地理解如何在实际项目中整合这两种语言。
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的Spinner组件实现一个两级下拉列表的Demo。 首先,`Spinner`是Android SDK提供的一种控件,它允许用户在一组选项中进行选择,并在默认状态下显示其中一个选项。它通常用于节省...
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge| UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]; [application...
在“Knonac公司照度计T-10 Demo”中,我们可能会发现Objective-C被用来创建一个Windows上的应用示例,这可能是为了展示如何在非苹果平台上利用Objective-C进行跨平台开发。照度计应用可能涉及到图形用户界面的构建,...