Skip to content

QueenieCplusplus/ObjectC_protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 

Repository files navigation

ObjectC_protocol

Object C 添增協定,以實現類別的多重繼承功能

協定事實上是一組方法列表,不依賴於特定類別,使用協定可以使不同類別共用相同訊息。 很類似後來 swift 的 delegate 委派功能。

宣告協定

               @protocol 協定名稱
               
               @end

聲明方法

               @protocol 協定名稱
               
               @required 
               實現協定的必須方法
               如無指定關鍵字,則協定中宣告的方法預設為必須實現。
               
               @end

KKK.h 協定

              #import <Foundation/Foundation.h>
              @protocol 協定名稱叫KKK
              
              -(void)go;   ------------------------------------
              @end                                            |
                                                              |
                                                              |
                                                            被QQQ.h繼承

XXX.h
介面
實行協定

               #import <Foudation/Foundation.h>               
               #import "KKK"      ----------------------
                                                        實施協定
               @interface QQQ: NSObject<KKK> --------
               {
               
                  int p;
               
               }
               
               -(void)setP;
               -(void)printP;
               
               @end

QQQ.h 建置類別 實作方法 一但介面實施協定 則協定中的必須方法必定需要實作

             #import"QQQ.h"
             
             @implementation QQQ
             
             -(void) setP
             {
             
                p=99;
             
             }
             
             -(void) printP
             {
             
                NSlog(@"%i", p);
             
             }
             
             -(void)go               -------
             {                              |
                NSLog(@"go");          繼承協定的方法
                                            |  
             }                       -------
              
             @end

main.m

            #import<Foundation.Foundation.h>
            #import"QQQ.h"
            
            int main(int argc, const char * argv[])
            {
            
               QQQ *q=[[QQQ alloc]init];
               
               //call functions
               [q setP];
               [q printP];
               [q go]; -------------------> 協定方法被輾轉繼承
                                            倘若 go() 方法沒有被實施
                                            則會出現警告訊息
            
               return 0;
            }

同時實施多個協定時 實施方式

              #import"協定1.h"
              #import"協定2.h"
              #import"協定3.h"
              
              @interface QQQ: NSObject<協定1, 協定2, 協定3>
              
                //...
                
              @end

協定中使用協定

            @protocol 協定2<協定1>
            
               //方法聲明
            
            @end

About

Object C 添增協定,以實現類別的多重繼承功能

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published