OC中的一个特性:延展
其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性。
OC中为了弥补C语言中的这个问题,就有了延展的概念,下面来看一下代码:
Person.h
[objc] view plaincopy
1. //
2. // Person.h
3. // 10_CategoryExtend
4. //
5. // Created by jiangwei on 14-10-11.
6. // Copyright (c) 2014年 jiangwei. All rights reserved.
7. //
8.
9. #import <Foundation/Foundation.h>
10.
11. @interface Person : NSObject
12.
13. - (void)work;
14.
15. @end
Person.m
[objc] view plaincopy
1. //
2. // Person.m
3. // 10_CategoryExtend
4. //
5. // Created by jiangwei on 14-10-11.
6. // Copyright (c) 2014年 jiangwei. All rights reserved.
7. //
8.
9. #import "Person.h"
10.
11. //这个叫做延展
12. //或者private省去也是没有问题的
13. @interface Person (private)
14. - (void)_showInfo;
15. @end
16.
17. @implementation Person{
18. //在这里定义属性,这个属性也是私有的
19. //但是这种方式和之前定义的@private的区别
20. //两者的区别就是一个在.h文件中定义的,一个是.m文件中定义的
21. //如果是开源的话,一般是开放.h和.m文件
22. //如果是闭源的话,一般只开放.h文件
23. }
24.
25. - (void)work{
26. //这行代码现在编译是没有问题的,在Xcode之前版本这样调用的话是有问题的,因为我们在C语言中在方法实现之前去调用的话,就必须要在之前声明一下
27. //这里我们就使用延展技术实现私有方法
28. //当然Xcode之后的版本修正了这个问题,所以现在延展的用途就不是很大了
29. //相当于C语言中的前向声明
30. [self _showInfo];
31. NSLog(@"开始工作了");
32. }
33.
34. //私有方法,只是在.m文件中定义了,没有在.h文件中声明,一般是在类中自己使用的
35. - (void)_showInfo{
36. NSLog(@"我的信息");
37. }
38.
39. @end
这里我们看到,在Person.h头文件中,我们定义了work方法,在Person.m文件中对这个方法的实现,但是我们在work方法中调用了_showInfo方法,如果在Xcode之前的版本或者是C语言中的特性,应该在work之前声明一下_showInfo方法,所以这里就有了延展:
延展的定义:
@interface Person (private)
- (void)_showInfo;
@end
在类定义之前,当然这里的private也是可以省略的,这样在work方法中就可以进行调用了。但是最新的Xcode已经弥补了这个问题,所以说延展的功能几乎可以忽略。这里只是对OC中的延展做一下介绍,以后可能几乎用不到他。
总结
OC中的一个特性:延展的更多相关文章
- OC 中 类目、延展和协议
Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 ...
- OC中的代理模式
OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的.这里举一个简单的例子:小孩类,护士类,保姆类,其中小孩类有两个方法 ...
- OC中的@interface和java中的区别以及 @implementation @protocol
java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时, ...
- OC中协议的概念以及用法
OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- 转:C4项目中验证用户登录一个特性就搞定
转:C4项目中验证用户登录一个特性就搞定 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用 ...
- OC中给我们提供的一个技术:谓词(NSPredicate).note
OC中给我们提供的一个技术:谓词(NSPredicate)OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到 ...
- OC中另外的一个常用技术:通知(Notification)
OC中另外的一个常用技术:通知(Nofitication)其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制 ...
- [转]MVC4项目中验证用户登录一个特性就搞定
本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Log ...
随机推荐
- ls命令 ls -trl
每天一个linux命令(1):ls命令 ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件 ...
- hdu 1421 搬寝室(dp)
Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...
- Bctf-pwn_ruin-re_lastflower
Pwn-ruin 用几个词来概括下漏洞原理:Arm+heap overflow(house of force)+dl-resolve Info leak: 在printf key8时,泄漏堆上地址(s ...
- javascript模式——Mixin
Mixin是一种扩展收集功能的方式,能提高代码的复用率. 在javascript中,原型可以继承于其它对象的原型,并且可以为任意数量的实例定义属性.可以利用这一点来促进函数的复用. 下面一段代码就是将 ...
- iOS断点及打印日志
首先,最简单的断点就是在Xcode项目文件中任意一行行号那点一下,就是加了一个断点 再次点击会变成浅蓝色,表示disable掉了 disable掉的断点不会起作用,但会在左上角蓝色的标签那留下记录,这 ...
- VS2008 自动化编译脚本
可以通过调用MSBuild来使VS2008进行自动化编译. 1.新建文本文件,后缀名改为bat 2.文件内加上: ;转到MSBuild.exe路径 c: cd\ cd C:\Windows\Micro ...
- Lucene学习之CURD
创建索引 Lucene在进行创建索引时,根据前面一篇博客,已经讲完了大体的流程,这里再简单说下: Directory directory = FSDirectory.open("/tmp/t ...
- slice,substr,substring
var s = '0123456789'; //slice 遇负数,则此负数值等同于 s.length + (负数) s.slice(3,6); //"345", 从位置3开始 ...
- js常用DOM操作
在博客园看到了苏夏写的常用DOM整理文章,地址:http://www.cnblogs.com/cabbagen/p/4579412.html,然后抽时间都试了一下这些常用的DOM操作.在这里记录一下. ...
- EventBus源码解析
用例 本文主要按照如下例子展开: //1. 新建bus对象,默认仅能在主线程上对消息进行调度 Bus bus = new Bus(); // maybe singleton //2. 新建类A(sub ...