詳解在Objective_C編程中使用私有方法
在Objective_C編程中使用私有方法是本文要介紹的內(nèi)容,主要是來學習私有方法的使用。面向?qū)ο蟮脑O(shè)計中,有一個特性封裝性,就是將某些東西包裝和隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。
在Objective-C編程中也可以做到這一點。比如下面這個類:
先是接口:
- // ===========================
- // = File: SomeClass.h
- // = Interface for SomeClass
- // ===========================
- @interface SomeClass : NSObject
- -(void) msg;
- +(void) classMsg;
- @end
- // ===========================
- // = File: SomeClass.h
- // = Interface for SomeClass
- // ===========================
- @interface SomeClass : NSObject
- -(void) msg;
- +(void) classMsg;
- @end
很簡單的接口,再是它的實現(xiàn)和類別:
- // ===========================
- // = File: SomeClass.m
- // ===========================
- #import "SomeClass.h"
- // =================================
- // = Interface for hidden methods
- // =================================
- @interface SomeClass (hidden)
- +(void) hiddenClassMethod;
- -(void) hiddenInstanceMethod;
- @end
- // =====================================
- // = Implementation of hidden methods
- // =====================================
- @implementation SomeClass (hidden)
- +(void) hiddenClassMethod
- {
- printf( "Hidden class method.\n" );
- }
- -(void) hiddenInstanceMethod
- {
- printf( "Hidden instance method\n" );
- }
- @end
- // ================================
- // = Implementation for SomeClass
- // ================================
- @implementation SomeClass
- -(void) msg
- {
- printf("Inside msg()...\n");
- [self hiddenInstanceMethod];
- [SomeClass hiddenClassMethod];
- }
- +(void) classMsg
- {
- printf("Inside classMsg()...\n");
- }
- @end
- // ===========================
- // = File: SomeClass.m
- // ===========================
- #import "SomeClass.h"
- // =================================
- // = Interface for hidden methods
- // =================================
- @interface SomeClass (hidden)
- +(void) hiddenClassMethod;
- -(void) hiddenInstanceMethod;
- @end
- // =====================================
- // = Implementation of hidden methods
- // =====================================
- @implementation SomeClass (hidden)
- +(void) hiddenClassMethod
- {
- printf( "Hidden class method.\n" );
- }
- -(void) hiddenInstanceMethod
- {
- printf( "Hidden instance method\n" );
- }
- @end
- // ================================
- // = Implementation for SomeClass
- // ================================
- @implementation SomeClass
- -(void) msg
- {
- printf("Inside msg()...\n");
- [self hiddenInstanceMethod];
- [SomeClass hiddenClassMethod];
- }
- +(void) classMsg
- {
- printf("Inside classMsg()...\n");
- }
- @end
有一個hidden的類別,在SomeClass的實現(xiàn)中調(diào)用了hidden的兩個方法。
只包含SomeClass.h文件的main:
- //
- // main.m
- // Private Method
- //
- // Created by mac on 11-8-10.
- // Copyright 2011年 __MyCompanyName__. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import "SomeClass.h"
- int main (int argc, const char * argv[])
- {
- SomeClass *ptr = [[SomeClass alloc] init];
- // Display message (including messages from hidden methods)
- [ptr msg];
- // Call a class method
- [SomeClass classMsg];
- // Compile warning (can't access hidden instance method)
- // [ptr hiddenInstanceMethod];
- // Compile warning (can't access hidden class method)
- // [SomeClass hiddenClassMethod];
- [ptr release];
- return 0;
- }
- //
- // main.m
- // Private Method
- //
- // Created by mac on 11-8-10.
- // Copyright 2011年 __MyCompanyName__. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import "SomeClass.h"
- int main (int argc, const char * argv[])
- {
- SomeClass *ptr = [[SomeClass alloc] init];
- // Display message (including messages from hidden methods)
- [ptr msg];
- // Call a class method
- [SomeClass classMsg];
- // Compile warning (can't access hidden instance method)
- // [ptr hiddenInstanceMethod];
- // Compile warning (can't access hidden class method)
- // [SomeClass hiddenClassMethod];
- [ptr release];
- return 0;
- }
運行成功后應(yīng)該可看到如下的顯示:
- Inside msg()...
- Hidden instance method
- Hidden class method.
- Inside classMsg()...
內(nèi)部調(diào)用hidden的兩個方法是沒問題的。在main的return之前有四行注釋,把其中兩行發(fā)送消息的注釋取消,再編譯后可能會遇到兩種情況:
1、有警告,但是編譯成功,直接運行后可以得到如下結(jié)果:
- Inside msg()...
- Hidden instance method
- Hidden class method.
- Inside classMsg()...
- Hidden instance method
- Hidden class method.
方法確實隱藏的(從警告中可以得知),但是可以連接到。
2、編譯失敗,Xcode4.2版本的編譯器好像默認是Apple LLVM compiler 3.0,需要切換成LLVM GCC 4.2才能編譯成功,編譯成功后運行可以得到上述結(jié)果。
小結(jié):詳解在Objective_C編程中使用私有方法的內(nèi)容介紹完了,希望通過講解在Objective_C編程中如何使用私有方法的學習能對你有所幫助!