http://blog.csdn.net/haishu_zheng/article/details/12873151
category和extension用来做类扩展的,可以对现有类扩展功能或者修改其功能。
在iOS中category应用是非常广泛的,系统自带的很多类都有多个category扩展功能。
一般category中可以定义新的方法、重写类原来的方法和添加readonly属性
而extension可以认为是匿名的category,但是这个extension相对于category有有一个特殊功能:
在extension中可以定义可写的属性,公有可读、私有可写的属性(Publicly-Readable, Privately-Writeable Properties)一般这样实现!
举例说明如下:
1. 创建测试程序empty application
2. 我们自定义一个UIViewController,命名为RootViewController,它的.h文件为:
[代码]c#/cpp/oc代码:
02 |
// RootViewController.h |
05 |
// Created by Vincent on 13-5-29. |
06 |
// Copyright (c) 2013年 DevDiv Community. All rights reserved. |
09 |
#import <UIKit/UIKit.h> |
11 |
@interface RootViewController : UIViewController |
那么在其对应的.m中会自动生成以下代码:
[代码]c#/cpp/oc代码:
02 |
// RootViewController.m |
05 |
// Created by Vincent on 13-5-29. |
06 |
// Copyright (c) 2013年 DevDiv Community. All rights reserved. |
09 |
#import "RootViewController.h" |
11 |
@interface RootViewController () |
14 |
@implementation RootViewController |
17 |
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil |
19 |
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; |
21 |
// Custom initialization |
29 |
// Do any additional setup after loading the view. |
30 |
self.title = @"RootController"; |
34 |
- (void)didReceiveMemoryWarning |
36 |
[super didReceiveMemoryWarning]; |
37 |
// Dispose of any resources that can be recreated. |
3. 第2步中我们能看到
[代码]c#/cpp/oc代码:
1 |
@interface RootViewController () |
这个就是extension了(也就是特殊类型的category)
如果我们在.h添加这样一个属性
@property (readonly) float value;
那么RootViewController对外就暴露一个readonly的属性,它是公开的,所以外部是不能够对它进行写操作的。
这时我们可以在extension加入以下代码:
@property (readwrite) float value;
那么这个属性在内部就是可读写的了,如果是只读只能在构造时期对它赋值,其他类方法中是不能对其赋值的。
有了这个特性支持,那么类的内部方法均可以对其进行赋值了。
- iOS中 分类(category)与扩展(Extension)的区别?
1.分类(category)的作用 (1).作用:可以在不修改原来类的基础上,为一个类扩展方法.(2).最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? (1).分类中只能添加“方法”,不 ...
- iOS中Category和Extension 原理详解
(一)Category .什么是Category? category是Objective-C .0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是为已 ...
- iOS学习笔记06—Category和Extension
iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...
- IOS中扩展机制Category和associative
在ios开发中,有时候会遇到以下的问题,需要在一个类中添加自己的一些属性和方法.一般的做法是重写一个类来继承它,但是有时候就只是需要添加一些简单的属性和方法,那么这样做就显得过于麻烦,其实在IOS中还 ...
- OC中分类(Category)和扩展(Extension)
1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...
- iOS中OC给Category加入属性
引: 非常多人知道能够用Category给已有的类加入一些新方法,可是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接加入属性的.那假设就是须要加 ...
- Category VS Extension 原理详解
(一)Category 1.什么是Category? category是Objective-C 2.0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是 ...
- iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)
关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...
- (转)如何处理iOS中照片的方向
如何处理iOS中照片的方向 31 May 2015 • 7 min. read • Comments 使用过iPhone或者iPad的朋友在拍照时不知是否遇到过这样的问题,将设备中的照片导出到Wind ...
随机推荐
- [USACO2002][poj1947]Rebuilding Roads(树形dp)
Rebuilding RoadsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8589 Accepted: 3854Descrip ...
- WCF入门(7)
前言 前段时间忙着驾照科目二的考试,都没有机会碰自己的电脑.说起来也是第一次参加这么没信心的考试,不过好在过了. 再打个广告吧,昨天终于把下载的WCF视频全部传到了QQ群共享里面,群号37819043 ...
- 第十二章:window对象
第十一章介绍了window对象及其客户端javascript所扮演的核心角色:它是客户端javascript程序的全局对象.本章介绍window对象的属性和方法,这些属性定义了不同的API,但是只有一 ...
- 第一章 : javaScript框架分类及主要功能
从内部架构和理念划分,目前JavaScript框架可以划分为5类. 第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的j ...
- 【Moqui业务逻辑翻译系列】Shipment Receiver Receives Shipment with Packing Slip but no PO
Shipment Receiver receives shipment. It has invoice tucked into it. Receiver records vendor name, ve ...
- Graphics samples2
为图形填充渐变色: Graphics2D g2=(Graphics2D)g; GradientPaint gra=new GradientPaint(20, 20, Color.BLUE, 100,8 ...
- FusionCharts的使用方法
来源于:http://www.cnblogs.com/xuhongfei/archive/2013/04/12/3016882.html 今天统计价格变化规律的时候找到的一个很好的文档,很详细 一.简 ...
- oracle-1
使用sqlplus 进入oracle (1)服务的启动终止 oracle 服务的关闭: SQL> shutdown immediate; oracle服务的启动: SQL> startup ...
- WebService 入门程序(一)
第一步:定义webService接口 package com.robert.ws.service; import javax.jws.WebService; @WebService public in ...
- 【poj3537】 Crosses ans Crosses
poj.org/problem?id=3537 (题目链接) 题意 给出一个1*n的棋盘,每次可以选择一个没被标记过的点打标记,若经过某一步操作使得出现3个连续的标记,则最后操作的人获胜.问是否存在先 ...