• [转]Objective-c中@interface、@implementation、@protocal


    原处:http://blog.csdn.net/l271640625/article/details/8393531

    以下Objective-c简称OC

    从事java开发的程序员们都知道,在java中interface是接口的意思,java中类是用class声明,接口用interface声明,是两个独立的部分,只有在类声明要实现某个接口时,他们两者才建立了关系,例如:

    1. interface AI{  
    2.     void print();  
    3. };  
    4. class AC{  
    5. };  

    这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现AI中声明的方法才能通过编译。

    1. class AC implement AI{  
    2.     void print(){  
    3.         system.out.println('Hello World');  
    4.     }  
    5. };  


    现在,我们来看Objective-c,网上大家都将oc中的interface理解为“非正式协议(或说接口)”,prototal理解为“正式协议(或说接口)”,我觉得那样理解起来虽然不困难,但是很变扭,于是我做一点自己的理解:
    1、protocal就相当于java中的interface;
    2、而interface和implementation共同代表一个类,两者的组合相当于java中的class,即oc中的类必须包括两部分,interface部分和implementation部分,这才是oc中的一个类的完整声明;然后OC中将成员变量和成员方法的声明部分放置在interface部分中,包括继承关系,protocal实现关系,都在interface里面的头部进行声明,然后将实现部分放置在implementation部分中,相当于是将类拆分成声明和实现两部分,这两部分缺一不可,所以在OC中,不妨不要将interface叫做接口,直接叫做类声明部分来得容易理解多了,简而言之,oc中interface是类的一个部分,和implementation共同组成一个完整的类。

    泛型


    OC中的类型id,它可以认为是一种特殊的指针:可以指向任何类型的对象。id 再加上protocal(即oc中的接口),能够达到类似java中泛型的效果

    1. #import <Foundation/Foundation.h>  
    2.   
    3.   
    4. @protocol A  
    5. @end  
    6.   
    7.   
    8. <strong style="color:white;background-color:#880000">@interface</strong> A : NSObject<A>  
    9. -(void) test:(id<A>) obj;  
    10. @end  


    注意这里的 -(void) test:(id<A>) obj; 这表明test方法接受一个任意类型的对象做为参数,但是该参数对象必须实现接口A,类似于java中的

    void test(List<A> obj) 。

  • 相关阅读:
    Linux BFS简介
    汇编语言学习——第二章 寄存器(CPU工作原理)
    _WSAStartup@8,该符号在函数 _main 中被引用
    javascript中处理引号编码&#034;
    tornado+ansible+twisted+mongodb操作和维护系统开发自己主动(一个)
    ORA-00600: internal error code, arguments: [4194], [53], [41], [], [], [], [], []
    【leetcode】Valid Palindrome
    开源 自由 java CMS
    创建分和生日比较数组
    有关动态多维数组的一个问题
  • 原文地址:https://www.cnblogs.com/jason-liu-blogs/p/3392550.html
Copyright © 2020-2023  润新知