详解在Objective_C编程中使用私有方法

移动开发 iOS
在Objective_C编程中使用私有方法是本文要介绍的内容,主要是来学习私有方法的使用。面向对象的设计中,有一个特性封装性,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。

Objective_C编程中使用私有方法是本文要介绍的内容,主要是来学习私有方法的使用。面向对象的设计中,有一个特性封装性,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。

在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 

很简单的接口,再是它的实现和类别:

  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的实现中调用了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;  

运行成功后应该可看到如下的显示:

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

内部调用hidden的两个方法是没问题的。在main的return之前有四行注释,把其中两行发送消息的注释取消,再编译后可能会遇到两种情况:

1、有警告,但是编译成功,直接运行后可以得到如下结果:

  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才能编译成功,编译成功后运行可以得到上述结果。

小结:详解在Objective_C编程中使用私有方法的内容介绍完了,希望通过讲解在Objective_C编程中如何使用私有方法的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

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-31 16:30:19

Lua多线程

2011-08-10 17:16:01

Objective-C静态变量

2023-09-16 19:38:17

Python私有属性私有方法

2011-08-04 17:13:48

Objective-C 字符串

2011-08-10 11:08:32

Objective-C字符串NSString

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2012-03-13 16:14:09

JavaJUnit

2021-03-22 08:45:30

异步编程Java

2011-07-27 16:18:42

Objective-c 协议

2022-06-07 19:48:07

TraefikProxy插件

2011-08-04 11:04:14

Objective-C 面向对象 继承

2024-01-07 17:29:10

编程语言线程Rust

2024-01-09 09:27:57

Rust编程泛型

2011-06-30 10:50:39

Qt OpenCV

2012-04-23 10:30:38

Hadoop

2011-06-28 10:03:37

Qt OpenCV qmake

2017-06-07 11:57:26

混合云OpenStack容器
点赞
收藏

51CTO技术栈公众号