objective c, category 和 protocol 中添加property

property的本质是实例变量 + getter 和 setter 方法

category和protocol可以添加方法

category 和 protocol中可以添加@property 关键字

所以,在protocol中添加property时,其实就是添加了 getter 和 setter 方法,在实现这个protocol的类中,我们要自己手动添加实例变量

例: @synthesize name = _name; //此行代码即添加了实例变量及实现了protocol中属性的getter、setter方法

在category中添加property时, 在@implentation添加 getter 和 setter方法时, 由于category不能添加实例变量,故必须通过运行时添加associated object的方法来添加实例变量

例:

#import "UIImage+category.h"

static const void *tagKey = &tagKey;

@implementation UIImage (category)

- (NSString *)tag {
    return objc_getAssociatedObject(self, tagKey);
}

- (void)setTag:(NSString *)tag {
    objc_setAssociatedObject(self, tagKey, tag, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end

http://www.jianshu.com/p/00f84e05be49

时间: 2024-10-14 18:01:38

objective c, category 和 protocol 中添加property的相关文章

iOS Category 和 Protocol 中的 Property 你们真的会了么?

一.property 合成存取器: @property的格式: 1 @property (修饰列表) 变量类型 变量名; Xcode4.4之前: @property使编译器自定生成set/get方法声明. @synthesize自动生成set/get方法的实现 @synthesize还会自动生成私有成员变量 Xcode4.4以后: 不用再写@synthesize,编译器通过@property就能给我们生成set/get方法的声明和实现,默认生成成员变量:_propertyName 用@prope

category中添加属性的简单方式

一.概念扩充: 1.如我们所知,使用category是用来对现有类进行功能扩展,或者将类分成多模块的一种方式.由声明和实现两部分组成.可以单独写成Objiective-C File类型文件(包含.h和.m). 2.category可以用来给现有类添加新的方法. 3.category不可以给类添加成员,会直接报错(编译不过). 4.category可以用@property来添加属性,此种方式会自动生成对应属性的set和get方法的声明,但是没有set和get方法的实现,也不会自动生成带有“_”的属

Category在项目中的实际运用

先看两行代码:1. label2.textColor = [UIColor colorWithHexString:@"707070"]; 2. _table.header = [MJRefreshHeader headerWithRefreshingBlock:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ /

山寨“饿了么”应用中添加菜品数量按钮效果

山寨“饿了么”应用中添加菜品数量按钮效果 本人视频教程系类   iOS中CALayer的使用 最终效果: 山寨源头: 源码:(此源码解决了重用问题,可以放心的放在cell中使用) AddAndDeleteButton.h 与 AddAndDeleteButton.m // // AddAndDeleteButton.h // LabelControll // // Created by YouXianMing on 14/12/11. // Copyright (c) 2014年 YouXian

【转】Objective-C——消息、Category和Protocol

Objective-C——消息.Category和Protocol 原文: http://www.cnblogs.com/chijianqiang/archive/2012/06/22/objc-category-protocol.html [注意]protocol本身是可以继承的 面向对象永远是个可以吐槽的话题,从开始提出到推崇备至,到充满质疑,一路走来让人唏嘘不已.面向对象的思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为面向对

JavaScript中的property和attribute的区别

时间: 2013-09-06 | 10:24 作者: 玉面小飞鱼 分类: DOM, js相关, 前端技术 2,222 次浏览 1. 定义 Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className.DOM节点是一个对象,因此,他可以和其他的JavaScript对象一样添加自定义的属性以及方

精通IOS-在表单元中添加子视图

#import <UIKit/UIKit.h> @interface NameAndColorCellTableViewCell : UITableViewCell @property(copy,nonatomic) NSString *name; @property(copy,nonatomic) NSString *color; @end NameAndColorCellTableViewCell.h // // NameAndColorCellTableViewCell.m // Tab

Xcode7中添加3DTouch

---恢复内容开始--- 首先是插件SBShortcutMenuSimulator的安装 1.git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git 2.cd SBShortcutMenuSimulator 3.make 4.xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT

在SSH2项目中添加JBPM4的开发环境

1.导入JBPM4开发所需的jar包,注意不要和原有的SSH2jar包冲突,启动tomcat,如果正常,则进行下一步的操作 2.将下面的JBPM4的映射文件代码,写入到hibernate.cfg.xml配置文件中: <!-- 导jpbm入映射文件 --> <mapping resource="jbpm.repository.hbm.xml" /> <mapping resource="jbpm.execution.hbm.xml" /&