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中的延展用途几乎可以忽略,只要了解一下即可,以后几乎用不到这个功能。

OC中的一个特性:延展的更多相关文章

  1. OC 中 类目、延展和协议

    Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 ...

  2. OC中的代理模式

    OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的.这里举一个简单的例子:小孩类,护士类,保姆类,其中小孩类有两个方法 ...

  3. OC中的@interface和java中的区别以及 @implementation @protocol

      java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时, ...

  4. OC中协议的概念以及用法

    OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...

  5. MVC4项目中验证用户登录一个特性就搞定

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  6. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

  7. OC中给我们提供的一个技术:谓词(NSPredicate).note

    OC中给我们提供的一个技术:谓词(NSPredicate)OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到 ...

  8. OC中另外的一个常用技术:通知(Notification)

    OC中另外的一个常用技术:通知(Nofitication)其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制 ...

  9. [转]MVC4项目中验证用户登录一个特性就搞定

    本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Log ...

随机推荐

  1. mysql基础:mysql与C结合实例

    一个简单的mysql与C的交互,使用了一些mysql的C API! 老鸟掠过,新手能够看看! /****************************************** 本文件学习mysq ...

  2. Flash Recovery Area

    1. 设置闪回恢复区 闪回恢复区主要通过3个初始化参数来设置和管理 db_recovery_file_dest:指定闪回恢复区的位置db_recovery_file_dest_size:指定闪回恢复区 ...

  3. 存储和读取MYSQL时间戳

    from_unixtime(date,'%Y%m%d')是MySQL里的时间函数date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串后面的 '%Y%m ...

  4. hdu 4707 Pet hdu 2013 Asia Regional Online —— Warmup

    一道简单的搜索题目,建一个树,根节点是 0 ,连接的两个节点的距离是 1 ,求 到 根节点长度是2的节点的个数. #include<stdio.h> #include<string. ...

  5. git工作区和暂存区

    工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区, ...

  6. View的滑动冲突

    一.常见的滑动冲突 场景1:外部滑动和内部滑动不一致 场景2:外部滑动和内部滑动一致 场景3:上面两种情况的嵌套 二.滑动冲突的处理方法 场景一:根据水平滑动还是竖直滑动判断到底由谁来拦截事件. 场景 ...

  7. ThinkPHP框架研究之一 基本函数 M和D的区别

    http://my.oschina.net/wxweven/blog/56563?fromerr=32n4Nf7V https://segmentfault.com/q/101000000298807 ...

  8. 用python发送GET和POST请求

    GET请求: python2.7: import urllib,urllib2 url='http://192.168.199.1:8000/mainsugar/loginGET/' textmod ...

  9. AWS之EC2远程登录

    网上有丰富的免费资源,Amazon的云主机就是开发者和学习者很好的选择. 但你得有一张信用卡,注册个AWS(Amazon web service)账号,就可以有自己公网ip的服务器了!!! 最近在折腾 ...

  10. Robot Framework语法学习(一)

    Robot Framework语法学习: 一.变量的声明.赋值与使用 1.变量标识符:每个变量都可以用  变量标识符 ${变量名} 来表示. 2.变量声明:可以在TestSuite上点右键或者在Edi ...