iOS Category与Extension、Delegate的认识

Catrgory与Extension、Delegate的区别与用法

苹果的官方文档

Category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。

#import

@interface NSObject (Category)

- (void)myMethod;

@end

这是一个最简单的Category,作用于NSObject类,给NSObject添加了一个方法。

使用Category需要注意的点:

(1) Category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃。

(2) Category理论上不能添加变量,但是可以使用@dynamic 来弥补这种不足。

#import

static const void * externVariableKey =&externVariableKey;

@implementation NSObject (Category)

@dynamic variable;

- (id) variable

{

return objc_getAssociatedObject(self, externVariableKey);

}

- (void)setVariable:(id) variable

{

objc_setAssociatedObject(self, externVariableKey, variable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-----------------------------------------------------------------------------------------

Extension非常像是没有命名的类别。

@interface MyClass : NSObject

@property (retain, readonly) float value;

@end

//一般的时候,Extension都是放在.m文件中@implementation的上方。

@interface MyClass ()

@property (retain, readwrite) float value;

@end

使用Extension需要注意的点:

(1) Extension中的方法必须在@implementation中实现,否则编译会报错。

协议(Protocol)没有父类也不能定义实例变量,只声明方法,声明未知类的接口,两个类之间的通信

@required :必须实现。默认

@optional :选择性的实现

NSObject为基本类根类也为基协议,可以写也可以不写

代理设计模式:两个对象协同解决难题,用于对象之间的通信

一般用于控件和控制器对象之间的通信,控件事件发生要通过控制器行为表现

就是说该对象类有委托方法,实现委托方法(遵守委托协议)需要在其他类中实现,通过其他类对象来代理解决

时间: 2024-10-09 05:58:18

iOS Category与Extension、Delegate的认识的相关文章

ios中的category与extension

ios中的category与extension Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议. 类目:为已知的类增加新的方法: 延展:通知在本类的定义里使用类目来声明私有方法,和实例变量: 协议:协议声明了可以被任何类实现的方法.注意:这些手段只能增加类的方法,并不能用于增加实例变量(延展除外),要增加类的实例变量,只能通过定义子类来间接实现.1.类目1)声明类目@interface NSString (NumberConvenience)-(NSNumber *)

iOS学习笔记06—Category和Extension

iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的class添加方法,包括那些没有源代码的类(如某些框架类). 二.示例 1.声明类别 @interface NSString (CategoryDemo) -(NSNumber*)

Objective -C NSDate、Category   、Extension、Protocol

NSDate的使用 NSDate是Cocoa中用于处理日期和时间的基础类,封装类某一给定的时刻,具体的日期,时间和时区 使用+date方法获取当前日期和时间 例如  :NSDate*nowDate = [NSDate date]: 注意,,NSLog(@"%@",nowDate): 无论你是哪个时区的时间,打印时间,打印时总是打印对应的0时区时间 NSTimeinterval NSTimeInterval(即double类型) 用以表示以秒为单位的时间间隔 可以使用-initWithT

obj-c9[[NSDate,{Category分类,Extension,管理'私有”方法,Protocol (协议)}]

#import <Foundation/Foundation.h>//#import "Person.h"#import "NSString+SayHiMessage.h"#import "NSMutableArray+ChangeArray.h" #import "NSString+ExchangeChineseToEnglish.h" #import "NSString+EmailValidation

xcode6中如何创建category,extension,protocol

我想有很多朋友们也跟我有过这样的疑惑,那就是新的Xcode6如何新建一个category,extension,protocol文件,也有很多人尽管自己去尝试找过了,但是没有找到,而不是Xcode6没有这个功能,而是你不够仔细.今天小农在经过几番寻找,才找到这个创建的方法. 无论是Mac端还是iOS端口,均是选择source下的oc file,如下所示: 选中后点击下一步: 看到了吗,下拉菜单可以选择你想要创建的文件.接下来,还可以选择你的原始类: 到这里,相信大家都明白了.我也不再赘述.

SKProductsRequest ios 7不调用delegate

在iOS7中,内购只能在真机上才会调用 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response协议方法 若是用模拟器,它回调用 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error { DLog(@"error ====== %@", error);

category 和 extension区别

1.Category和Extension都是用来给已定义的类增加新的内容的. 2.Category和原有类的耦合更低一些,声明和实现都可以写在单独的文件里.但是只能为已定义类增加Method,而不能加入成员变量. 3.Extension耦合比较高,声明可以单独写,但是实现必须写在原有类的@implementation中.可以增加Method和成员变量. 下面这里是翻译的objective-c-primer.pdf 中的相关资料,可以对这两个概念有一个初步了解. 理解了Category,Exten

类目 (category),扩展(Extension)和协议(protocol) (转)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式2.类目的局限性:1)类目无法向已有的类中添加实例变量: 2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来. 3.类目的作用:?       将类的实现分散到多个不同的文件中–      将多个类目的声明放入同一个.h文件中–      将实现放入多个.m方法中?       使

ios category类别的使用

ios category类别的使用 Objective-C提供了一个非常灵活的类(Class)扩展机制-类别(Category).类别用于对一个已经存在的类添加方法(Methods).你只需要知道这个类的公开接口,不需要知道类的源代码.需要注意的是,类别不能为已存在的类添加实例变量(Instance Variables). 类别的基本语法如下: @interface ClassName(CategoryName)//method declarations@end@interface 类名(类别名