`
jsntghf
  • 浏览: 2543430 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

如何给category添加属性

    博客分类:
  • iOS
阅读更多

主要是使用了runtime中的associative机制。

 

NSDate+extension.h

@interface NSDate (extension)

@property (nonatomic, strong) NSDateFormatter *formatter;

@end

 

NSDate+extension.m

#import "NSDate+extension.h"
#include <objc/runtime.h>

static void *formatterKey = (void *) @"formatterKey";

@implementation NSDate (extension)
@dynamic formatter;

+ (NSDateFormatter *)formatter {
	return objc_getAssociatedObject(self, formatterKey);
}

+ (void)setFormatter:(NSDateFormatter *)formatterProperty {
	objc_setAssociatedObject(self, formatterKey, formatterProperty, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

 

分享到:
评论
1 楼 alec03711 2015-08-26  
还写OC代码呢,都开始用Swift啦

相关推荐

    iOS 给已有类添加属性

    要给已有类添加属性,我们需要以下几个步骤: 1. **定义属性**:首先,你需要确定要添加的属性类型,是对象属性(如NSString、NSArray等)还是基本数据类型(如int、float等)。对于对象属性,通常我们会声明一个...

    通过 objc_setAssociatedObject (关联) 的形式实现为Category (类别) 添加属性

    下面我们将深入探讨如何通过`objc_setAssociatedObject`为Category添加属性,以及相关知识点。 首先,我们需要了解Category的基本概念。Category是一种分类、划分已存在类的方法和协议的方式,它不涉及新的实例变量...

    swift-分类动态添加属性

    本篇文章将深入探讨如何在Swift中通过分类动态地为类添加属性,并提供实践示例。 首先,我们要明确Swift中的分类和扩展的概念。分类是Objective-C中的概念,但在Swift中,它的功能被扩展所取代。扩展可以为已存在的...

    C# 自定义控件的属性和添加事件

    本文将深入探讨如何创建自定义控件、添加属性以及为它们添加事件,以提升软件界面的交互性和用户体验。 首先,我们要了解什么是自定义控件。在Windows Forms或WPF应用中,自定义控件是通过对现有控件进行继承或从`...

    分类中添加属性_实例代码

    本文将深入探讨如何在分类中添加属性,并提供相应的实例代码。 首先,理解分类的本质。分类是用来扩展已有类的功能,它主要用来添加方法,而不是实例变量。因为分类并不创建新的类实例,而是对已存在的类进行扩充,...

    为分类动态添加属性.zip

    "为分类动态添加属性"的主题涉及到Objective-C的类扩展(Category)、运行时特性和KVC(Key-Value Coding)等概念。下面我们将深入探讨这些知识点。 首先,类别(Category)是Objective-C中一个强大的特性,它允许...

    iOS关联对象示例详解

    在iOS开发中如果我们想给一个对象动态添加属性或者给category添加属性的时候,都是通过runtime的关联对象去实现,那我们添加的属性到底是如何存取的呢?是直接添加到了对象自身的内存中了去吗?带着这些疑问让我们看...

    category练习代码

    1. 避免命名冲突:Category添加的方法可能会与原类或其他Category的方法名冲突,因此建议在方法前加上类别名作为前缀。 2. Category不能添加实例变量,但可以通过关联对象实现类似效果。 3. Category可以添加分类...

    ios开发UIImage category实现添加水印(图片和文字)

    现在你可以在项目中导入这个Category,轻松地给UIImage对象添加水印: ```objc UIImage *originalImage = [UIImage imageNamed:@"example"]; UIImage *textWatermarkedImage = [originalImage ...

    iOS常用category

    - Category只能添加方法,不能添加实例变量,而Subclass可以添加属性和方法。 8. **Category的局限性**: - 无法添加初始化方法,因为Objective-C不允许在Category中重写`init`系列方法。 - 无法添加析构方法,...

    自定义控件(十)添加枚举型属性

    本文将详细讲解如何在Visual Studio 2008(VS2008)中创建自定义控件,并添加枚举型属性,以提高控件的灵活性和可配置性。 一、自定义控件基础 自定义控件是通过继承已有的服务器控件,或直接继承`System.Web.UI....

    propertyGrid动态加载自定义属性

    然而,有时我们希望只显示特定的属性或者添加一些自定义的属性,这就需要用到动态加载自定义属性的技术。 1. **创建自定义属性**: 在C#中,我们可以通过继承`System.ComponentModel.DescriptionAttribute`或`System...

    Android安卓隐藏任务栏及增加Home属性

    无论是在Cocos2d-x还是Unity项目中,都需要在相应的 `AndroidManifest.xml` 文件中的 `&lt;activity&gt;` 标签内添加 `&lt;category android:name="android.intent.category.HOME" /&gt;` 和 `&lt;category android:name="android....

    Runtime使ViewController具有name属性

    - 使用Category添加属性时,记得遵循内存管理规则,比如上面的例子中使用了`OBJC_ASSOCIATION_COPY`来确保字符串的复制。 - 在实际项目中,应尽可能避免过多使用Runtime,以免增加代码的复杂性和维护难度。 通过...

    iOS Category基类扩展源码

    - **不能添加属性**:Category无法添加实例变量,因此也无法添加带有存储属性的方法。不过可以通过关联对象(Associated Objects)来间接实现类似效果。 - **方法名冲突**:如果两个Category给同一个类添加了同名...

    Category VS Extension 原理详解

    * Category 中也可以添加属性,只不过 @property 只会生成 setter 和 getter 的声明,不会生成 setter 和 getter 的实现以及成员变量。 * 如果 Category 中的方法和类中原有方法同名,运行时会优先调用 Category 中...

    iOS常用类别(Category)

    - `UIView+Geometry`: 添加设置视图边距、居中等几何属性的便捷方法。 - `UIView+TapGesture`: 提供单击手势识别功能,如`- (void)addTapGestureRecognizerWithTarget:(id)target action:(SEL)action`。 5. ...

    swift-功能丰富的Category类型工具库

    在Swift中,扩展可以添加计算属性、存储属性、方法、类型方法、下标以及协议遵循,但不能添加初始化方法或析构方法。"YYCategories"库正是利用了这一特性,为许多系统类和自定义类提供了额外的方法。 例如,`String...

    在AxToolBarControl中添加Windows窗体中的控件(Label、button)

    在上面的代码中,我们定义了一个 CustomControlCommand 类,它继承了 ICommand 和 IToolControl 接口,并包含一个 Control 类型的 CustomControl 属性。我们可以通过这个类将 Combobox 添加到 AxToolbarControl 中。...

    用objc/runtime给类别扩展属性代码

    在iOS开发中,Objective-C runtime 是一个非常强大的工具,它允许我们在运行时动态地修改类的行为,添加属性、方法等。本篇文章将深入探讨如何利用objc/runtime为类别扩展属性的代码实现。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics