iOS中category和extension
来源:互联网 发布:ubuntu安装emacs 编辑:程序博客网 时间:2024/05/07 00:19
1、形式上来看,extension是匿名的category。
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以(其实也可以使用动态生成category成员变量。)
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以(其实也可以使用动态生成category成员变量。)
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代码:
01
//
02
// RootViewController.h
03
// Test4
04
//
05
// Created by Vincent on 13-5-29.
06
// Copyright (c) 2013年 DevDiv Community. All rights reserved.
07
//
08
09
#import <UIKit/UIKit.h>
10
11
@
interface
RootViewController : UIViewController
12
@end
那么在其对应的.m中会自动生成以下代码:
[代码]c#/cpp/oc代码:
01
//
02
// RootViewController.m
03
// Test4
04
//
05
// Created by Vincent on 13-5-29.
06
// Copyright (c) 2013年 DevDiv Community. All rights reserved.
07
//
08
09
#import "RootViewController.h"
10
11
@
interface
RootViewController ()
12
@end
13
14
@implementation RootViewController
15
16
17
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
18
{
19
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
20
if
(self) {
21
// Custom initialization
22
}
23
return
self;
24
}
25
26
- (
void
)viewDidLoad
27
{
28
[super viewDidLoad];
29
// Do any additional setup after loading the view.
30
self.title =
@"RootController"
;
31
self.navigationItem
32
}
33
34
- (
void
)didReceiveMemoryWarning
35
{
36
[super didReceiveMemoryWarning];
37
// Dispose of any resources that can be recreated.
38
}
39
40
@end
3. 第2步中我们能看到
[代码]c#/cpp/oc代码:
1
@
interface
RootViewController ()
2
@end
这个就是extension了(也就是特殊类型的category)
如果我们在.h添加这样一个属性
@property (readonly) float value;
那么RootViewController对外就暴露一个readonly的属性,它是公开的,所以外部是不能够对它进行写操作的。
这时我们可以在extension加入以下代码:
@property (readwrite) float value;
那么这个属性在内部就是可读写的了,如果是只读只能在构造时期对它赋值,其他类方法中是不能对其赋值的。
有了这个特性支持,那么类的内部方法均可以对其进行赋值了。
1、形式上来看,extension是匿名的category。
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以(其实也可以使用动态生成category成员变量。)
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以(其实也可以使用动态生成category成员变量。)
- iOS中category和extension
- iOS中 category 和extension的区别
- iOS中 category 和extension的区别
- ios Category和Extension
- ios Category 和 extension 区别,Category中使用属性
- iOS类别和扩展(Category和Extension)
- IOS中的类别(Category)和扩展(Extension)
- 【iOS学习笔记】Category和Extension
- iOS Category 和 Extension的区别
- iOS类别(Category)和扩展(Extension)
- iOS笔记 复习Category和Extension
- IOS category 与 extension
- iOS category && extension
- iOS Category Extension 区别
- iOS - Category and Extension
- Category和Extension
- Category和Extension
- Category和Extension
- 从海量数据中找出最小的k个数
- TextView的使用
- C# 配置文件读取与修改
- 外汇短线操作技巧攻略
- Hashmap__h&length-1 原因分析
- iOS中category和extension
- HD1022Train Problem I(栈的运用)
- Non-terminating decimal expansion; no exact representable decimal result
- 显示透明的PNG图片
- 【让U盘的使用记录在注册表中消失的方法】
- DIV 居中对齐
- div
- 程序设计60条原则
- List All Memcached Keys