Objective-C之Category的使用

Category

分类相关

category是OC的特有的语法

// 分类的声明

@interface ClassName (CategoryName)

NewMethod; //在类别中添加方法
 //不允许在类别中添加变量
@end
  • ClassName: 需要给哪个类扩充方法
  • CategoryName: 分类的名称
  • NewMethod: 扩充的方法

// 分类的实现

@implementation ClassName(CategoryName)

NewMethod
... ...
@end

ClassName: 需要给哪个类扩充方法
CategoryName: 分类的名称
NewMethod: 扩充的方法

注意:

1.分类是用于给原有类添加方法的, 它只能添加方法, 不能添加属性(成员变量)

@interface Person (NJ)
//{
// double _height;
//}

2.分类中的@property, 只会生成setter/getter方法的声明, 不会生成实现以及私有的成员变量

//@property (nonatomic, assign) double height;
验证方式:在main函数中调用property声明的属性,并且赋值,发现会奔溃

3.可以在分类中访问所有类中的.h中的属性

4.原类中和分类中有相同的方法,会调用分类中的方法,也就是说回忽略原类中的方法,所以开发建议,不要在分类写出原类中同名的方法。

5.如果多个分类中都有和原类中同名的方法,那么调用该方法的时候执行谁由编译器决定,会执行最后参与编译的一个分类。 怎么看分类谁先编译呢?


所以不建议在分类声明实现很多和原类同名的方法。

类扩展(Class Extension)

匿名分类或者匿名扩展:没有名字的分类

延展类别有称为扩展(Extendsion),是Category的一个特例。

  • 主要的作用:为某个类扩充一些私有的成员变量和方法

    • 写在.m文件中
    • 英文名是Class Extension

类扩展书写格式

@interface 类名 ()
@end

对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”

时间: 2024-10-09 17:51:33

Objective-C之Category的使用的相关文章

hql语句查询实体类News的属性category为“生活类新闻”的LIST,HQL语句怎么写?

问题描述 hql语句查询实体类News的属性category为"生活类新闻"的LIST,HQL语句怎么写? 用SSH框架,写一个实现类,查询实体类News的属性category为"生活类新闻"的LIST 返回一个LIST,该怎么写???????????????????? 实体类为News 属性为category 数据库中表名为t_news category为属性 import java.util.List; import org.springframework.st

android-Intent的Action与Category的区别

问题描述 Intent的Action与Category的区别 Action和Category都是用来描述要启动的目标组件的特征的,那么这两者有什么区别?为什么要分开设计这两者而不是只用其中一个就可以了? 解决方案 每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",实际上android默认定义了几种Action对应到category中,CATEGORY_BRO

理解COM编程中的“种类”(Category)概念

问题: 我要编写一个支持ActiveX文档插件(Plug-ins)的应用程序.为了创建一个已安装插件的菜单,在程序启动时我扫描注册表查找已安装的ActiveX组件.对于每一个ActiveX组件创建一个实例并查询一个叫IMyAppPlugin的专门接口.如果这个接口存在,那么我就认为这个组件就是我的程序所要的插件.这样做好像行不通,尤其是安装有多个ActiveX组件时做起来就更困难.有没有更好的办法处理这种问题? 解答: 对于这种情况,Windows确实有更好的办法来解决:既种类(category

用Dojo Objective Harness对Web 2.0应用程序进行单元测试

单元测试是保证软件开发质量的一个重要部分,对于敏捷和极限编程开发方法尤其如此.通常,对 Web 2.0 客户端用户界面进行自动的单元测试很困难,所以很少有人去做尝试.然而,Dojo 提供了一个单元测试工具,借此可以评估 JavaScript 的功能及用户界面的可视性.经过这个工具彻底测试过的用户界面最终包含的 Bug 数量会极大的减少.本文阐述了 Dojo Objective Harness (DOH) 的主要特点并通过与其它 Web 2.0 应用程序测试工具的比较展示了其强大的功能. 单元测试

Android开发入门(二)使用意图 2.8 添加Category

通过使用Intent-Filter中的<category>元素,我们可以把activities进行分组.假设已经在 AndroidManifest.xml中添加了<category>元素: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" p

IOS开发:Objective-C Category的最初体验

  Step1: 创建项目 启动Xcode -> File -> New -> Project. 然后创建一个 iOS Single View Applciation.这里我们命名为 Categories. 开发:Objective-C Category的最初体验-最高的初体验"> Step2: 创建Category 现在来创建一个Category来为NSString添加扩展方法.点击 File -> New -> File 然后选择 Cocoa Touch

Objective C从远程url下载图片方法汇总

  本文给大家分享了2则使用Objective C从远程url下载图片的方法,都是个人项目中使用的,汇总下推荐给大家,有需要的小伙伴可以参考下. Objective C从远程url下载图片 ? 1 2 3 4 5 6 7 8 - (UIImage *) getImageFromURL: (NSString *)theURL { UIImage *theImage = NULL; NSString *imageFileName = [BT_strings getFileNameFromURL:th

iPhone objective c 截屏代码

  objective c 截屏代码 -(void)save{ UIGraphicsBeginImageContext(mybackgroundview.bounds.size); //currentView 当前的view [mybackgroundview.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

屏蔽响应事件继续向父视图传递的category

屏蔽响应事件继续向父视图传递的category 这篇教程是上一篇教程的升级版,将复杂的代码封装成了category,更便于使用:) 效果: 源码: UIGestureRecognizer+EnvetInCurrentView.h 与 UIGestureRecognizer+EnvetInCurrentView.m // // UIGestureRecognizer+EnvetInCurrentView.h // BackgroundView // // Created by YouXianMin

IOS-Swift、Objective-C、C++混合编程

1.Objective-C调用C++代码 后缀为m文件的是Objective-C的执行文件,而后缀为mm文件的是Objective-C++文件. 直接在Objective-C中是无法调用C++代码的,所以如果需要在Objective-C调用C++语言就需要直接将后缀m文件改为mm,然后就可以调用C++代码了. Objective-C兼容C,Objective-C++兼容C.C++. 接下来是在OC工程中创建C++文件,并调用C++的代码: 然后在OC文件中直接用C++的语法调用C++,所以前提是