zoukankan      html  css  js  c++  java
  • OC中的一个特性:延展

    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中的延展用途几乎可以忽略,只要了解一下即可,以后几乎用不到这个功能。
  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/GhostKZShadow/p/5105388.html
Copyright © 2011-2022 走看看