自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解在Objective_C編程中使用私有方法

移動開發(fā) iOS
在Objective_C編程中使用私有方法是本文要介紹的內(nèi)容,主要是來學習私有方法的使用。面向?qū)ο蟮脑O(shè)計中,有一個特性封裝性,就是將某些東西包裝和隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。

Objective_C編程中使用私有方法是本文要介紹的內(nèi)容,主要是來學習私有方法的使用。面向?qū)ο蟮脑O(shè)計中,有一個特性封裝性,就是將某些東西包裝和隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。

在Objective-C編程中也可以做到這一點。比如下面這個類:

先是接口:

  1. // ===========================     
  2. // = File: SomeClass.h     
  3. // = Interface for SomeClass     
  4. // ===========================     
  5. @interface SomeClass : NSObject    
  6. -(void) msg;    
  7. +(void) classMsg;     
  8. @end    
  9. // ===========================  
  10. // = File: SomeClass.h  
  11. // = Interface for SomeClass  
  12. // ===========================  
  13. @interface SomeClass : NSObject  
  14. -(void) msg;  
  15. +(void) classMsg;   
  16. @end 

很簡單的接口,再是它的實現(xiàn)和類別:

  1. // ===========================     
  2. // = File: SomeClass.m     
  3. // ===========================     
  4. #import "SomeClass.h"     
  5.     
  6. // =================================     
  7. // = Interface for hidden methods     
  8. // =================================     
  9. @interface SomeClass (hidden)    
  10.     
  11. +(void) hiddenClassMethod;    
  12. -(void) hiddenInstanceMethod;     
  13.     
  14. @end    
  15.     
  16. // =====================================     
  17. // = Implementation of hidden methods     
  18. // =====================================     
  19. @implementation SomeClass (hidden)    
  20.     
  21. +(void) hiddenClassMethod    
  22. {    
  23.     printf( "Hidden class method.\n" );    
  24. }    
  25.     
  26. -(void) hiddenInstanceMethod    
  27. {    
  28.     printf( "Hidden instance method\n" );    
  29. }    
  30.     
  31. @end    
  32.     
  33. // ================================     
  34. // = Implementation for SomeClass     
  35. // ================================     
  36. @implementation SomeClass    
  37.     
  38. -(void) msg    
  39. {    
  40.     printf("Inside msg()...\n");    
  41.         
  42.     [self hiddenInstanceMethod];    
  43.     [SomeClass hiddenClassMethod];    
  44. }    
  45.     
  46. +(void) classMsg    
  47. {    
  48.     printf("Inside classMsg()...\n");    
  49. }    
  50.     
  51. @end    
  52. // ===========================  
  53. // = File: SomeClass.m  
  54. // ===========================  
  55. #import "SomeClass.h"  
  56.  
  57. // =================================  
  58. // = Interface for hidden methods  
  59. // =================================  
  60. @interface SomeClass (hidden)  
  61.  
  62. +(void) hiddenClassMethod;  
  63. -(void) hiddenInstanceMethod;   
  64.  
  65. @end  
  66.  
  67. // =====================================  
  68. // = Implementation of hidden methods  
  69. // =====================================  
  70. @implementation SomeClass (hidden)  
  71.  
  72. +(void) hiddenClassMethod  
  73. {  
  74.  printf( "Hidden class method.\n" );  
  75. }  
  76.  
  77. -(void) hiddenInstanceMethod  
  78. {  
  79.  printf( "Hidden instance method\n" );  
  80. }  
  81.  
  82. @end  
  83.  
  84. // ================================  
  85. // = Implementation for SomeClass  
  86. // ================================  
  87. @implementation SomeClass  
  88.  
  89. -(void) msg  
  90. {  
  91.  printf("Inside msg()...\n");  
  92.    
  93.  [self hiddenInstanceMethod];  
  94.  [SomeClass hiddenClassMethod];  
  95. }  
  96. +(void) classMsg  
  97. {  
  98.  printf("Inside classMsg()...\n");  
  99. }  
  100. @end 

有一個hidden的類別,在SomeClass的實現(xiàn)中調(diào)用了hidden的兩個方法。

只包含SomeClass.h文件的main:

  1. //     
  2. //  main.m     
  3. //  Private Method     
  4. //     
  5. //  Created by mac on 11-8-10.     
  6. //  Copyright 2011年 __MyCompanyName__. All rights reserved.     
  7. //     
  8.     
  9. #import <Foundation/Foundation.h>     
  10. #import "SomeClass.h"     
  11.     
  12. int main (int argc, const char * argv[])    
  13. {    
  14.     SomeClass *ptr = [[SomeClass alloc] init];    
  15.         
  16.     // Display message (including messages from hidden methods)     
  17.     [ptr msg];    
  18.         
  19.     // Call a class method     
  20.     [SomeClass classMsg];    
  21.         
  22.     // Compile warning (can't access hidden instance method)     
  23.     //  [ptr hiddenInstanceMethod];     
  24.         
  25.     // Compile warning (can't access hidden class method)     
  26.     //  [SomeClass hiddenClassMethod];       
  27.     [ptr release];    
  28.     
  29.     return 0;    
  30. }    
  31. //  
  32. //  main.m  
  33. //  Private Method  
  34. //  
  35. //  Created by mac on 11-8-10.  
  36. //  Copyright 2011年 __MyCompanyName__. All rights reserved.  
  37. //  
  38.  
  39. #import <Foundation/Foundation.h> 
  40. #import "SomeClass.h"  
  41. int main (int argc, const char * argv[])  
  42. {  
  43.  SomeClass *ptr = [[SomeClass alloc] init];  
  44.  // Display message (including messages from hidden methods)  
  45.  [ptr msg];  
  46.  // Call a class method  
  47.  [SomeClass classMsg];  
  48.  // Compile warning (can't access hidden instance method)  
  49.  //  [ptr hiddenInstanceMethod];  
  50.  // Compile warning (can't access hidden class method)  
  51.  //  [SomeClass hiddenClassMethod];    
  52.  [ptr release];  
  53.  return 0;  

運行成功后應(yīng)該可看到如下的顯示:

  1. Inside msg()...  
  2. Hidden instance method  
  3. Hidden class method.  
  4. Inside classMsg()... 

內(nèi)部調(diào)用hidden的兩個方法是沒問題的。在main的return之前有四行注釋,把其中兩行發(fā)送消息的注釋取消,再編譯后可能會遇到兩種情況:

1、有警告,但是編譯成功,直接運行后可以得到如下結(jié)果:

  1. Inside msg()...  
  2. Hidden instance method  
  3. Hidden class method.  
  4. Inside classMsg()...  
  5. Hidden instance method  
  6. Hidden class method. 

方法確實隱藏的(從警告中可以得知),但是可以連接到。
 
2、編譯失敗,Xcode4.2版本的編譯器好像默認是Apple LLVM compiler 3.0,需要切換成LLVM GCC 4.2才能編譯成功,編譯成功后運行可以得到上述結(jié)果。

小結(jié):詳解在Objective_C編程中使用私有方法的內(nèi)容介紹完了,希望通過講解在Objective_C編程中如何使用私有方法的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-08 17:39:37

Objective_C繼承機制

2011-08-17 11:05:22

Objective-C方法

2022-03-17 08:30:28

Python私有屬性私有方法

2011-08-10 17:16:01

Objective-C靜態(tài)變量

2011-08-31 16:30:19

Lua多線程

2011-08-10 11:08:32

Objective-C字符串NSString

2011-08-04 17:13:48

Objective-C 字符串

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-08-04 11:04:14

Objective-C 面向?qū)ο? 繼承

2023-09-16 19:38:17

Python私有屬性私有方法

2011-07-27 16:18:42

Objective-c 協(xié)議

2021-03-22 08:45:30

異步編程Java

2011-07-29 16:16:30

Objective-c block

2011-08-17 10:58:59

Objective-C構(gòu)造函數(shù)

2012-03-13 16:14:09

JavaJUnit

2022-06-07 19:48:07

TraefikProxy插件

2011-08-02 15:55:31

Objective-C NSAutorele

2011-07-19 17:18:35

Objective-C Property

2009-06-29 17:57:30

ApplicationJSP

2024-01-07 17:29:10

編程語言線程Rust
點贊
收藏

51CTO技術(shù)棧公眾號