category and extension(二)

h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote {
margin: 0;
padding: 0;
}
body {
font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif;
font-size: 13px;
line-height: 18px;
color: #737373;
background-color: white;
margin: 10px 13px 10px 13px;
}
table {
margin: 10px 0 15px 0;
border-collapse: collapse;
}
td,th {
border: 1px solid #ddd;
padding: 3px 10px;
}
th {
padding: 5px 10px;
}

a {
color: #0069d6;
}
a:hover {
color: #0050a3;
text-decoration: none;
}
a img {
border: none;
}
p {
margin-bottom: 9px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #404040;
line-height: 36px;
}
h1 {
margin-bottom: 18px;
font-size: 30px;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
font-size: 13px;
}
hr {
margin: 0 0 19px;
border: 0;
border-bottom: 1px solid #ccc;
}
blockquote {
padding: 13px 13px 21px 15px;
margin-bottom: 18px;
font-family:georgia,serif;
font-style: italic;
}
blockquote:before {
content:"\201C";
font-size:40px;
margin-left:-10px;
font-family:georgia,serif;
color:#eee;
}
blockquote p {
font-size: 14px;
font-weight: 300;
line-height: 18px;
margin-bottom: 0;
font-style: italic;
}
code, pre {
font-family: Monaco, Andale Mono, Courier New, monospace;
}
code {
background-color: #fee9cc;
color: rgba(0, 0, 0, 0.75);
padding: 1px 3px;
font-size: 12px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
pre {
display: block;
padding: 14px;
margin: 0 0 18px;
line-height: 16px;
font-size: 11px;
border: 1px solid #d9d9d9;
white-space: pre-wrap;
word-wrap: break-word;
}
pre code {
background-color: #fff;
color:#737373;
font-size: 11px;
padding: 0;
}
sup {
font-size: 0.83em;
vertical-align: super;
line-height: 0;
}
* {
-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
body {
width: 854px;
margin:10px auto;
}
}
@media print {
body,code,pre code,h1,h2,h3,h4,h5,h6 {
color: black;
}
table, pre {
page-break-inside: avoid;
}
}

Category And Extension(二)

Category And Extension(二)

add property to category

上一篇文章说不能加category添加属性,最近做的一个项目刚好有这个需求,google了一下,其实category是有办法添加属性的-_-,而且还有多种方法,在这里总结一下.


1>.methods1

直接在category的.h中添加,这时xcode会有warning。

Property ‘test1‘ requires method ‘test1‘ to be defined - use @dynamic or provide a method implementation in this category

按照提示在.m文件在@dynamic关键字修改就OK了。dynamic在编译时不会检查setter/getter的实现,在运行时setter/getter会动态绑定,在需要setter/getter的class中自己实现就OK了。

 #import <Foundation/Foundation.h>

@interface NSObject (AddProperty1)

@property(nonatomic,strong)NSString *test1;

@end

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

#import "NSObject+AddProperty1.h"

@implementation NSObject (AddProperty1)

@dynamic test1;

@end

(在用这种方法添加proprety,使用setter/getter的class如果不implementation会crash的)

2>.methods2

//只用在.h文件添加协议
#import <Foundation/Foundation.h>

@protocol NSObjectProtocol <NSObject>

@optional

@property(nonatomic,strong)NSString *test3;

@end

@interface NSObject (AddProperty3)<NSObjectProtocol>

@end

同上一种方法一样,在使用setter/getter的class中要implementation,否则会crash

3>.methods3

#import <Foundation/Foundation.h>

@interface NSObject (AddProperty2)

@property(nonatomic,strong)NSString *test2;

@end

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

#import "NSObject+AddProperty2.h"

#import <objc/runtime.h>

@implementation NSObject (AddProperty2)

-(NSString*)test2{

    return objc_getAssociatedObject(self, @selector(test2));
}

-(void)setTest2:(NSString *)test2{

    objc_setAssociatedObject(self, @selector(test2), test2, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}
@end

利用objctive-c的runtime特性。个人更偏好于第三种方法,改动最小,而且在不知道源码的源码的情况下也能add property

附上Demo省得以后自己忘记了

CategoryAndExtension.zip

category and extension(二)

时间: 2024-10-05 21:17:41

category and extension(二)的相关文章

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:分类(Category、extension)

分类(Category .Extension) (一)分类的划分 (2) 1.(命名的类别)类别Category:只能添加新的方法,不能添加新变量. 2.(未命名的类别)类的扩展Extension://扩展一般直接写在类的实现文件中     //扩展中定义的都是类中私有的实例变量和方法 (二)分类的使用 (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量 (2)在分类方法的实现中可以访问原来类中的成员变量: (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的

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方法中?       使

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

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

Objective -C NSDate、Category &nbsp; 、Extension、Protocol

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

xcode6中如何创建category,extension,protocol

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

第七讲.NSDate,category(分类),extension(延展),protocol(协议),delegate(代理)

一.掌握NSDate和NSDateFormatter的使用 NSDate是Cocoa中?用于处理日期和时间的基础类,封装了某一给定的时刻(含日期,时间,时区). 了解NSDate的创建,如何计算当前时间,时间间隔,以及时间日期与字符之间的互转. 1>.NSDate创建,当地时间计算,时间按间隔计算,时间与字符之间的互转 练习题1:计算当前时间与一个固定时间按的时间差 练习二:字符串转化为日期对象 二.掌握Category的定义和使用(只能为类扩展类方法或实例方法) 1.主要作用是为:没有源代码的