`
zyallday
  • 浏览: 26793 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Obj-C中如何实现私有方法

阅读更多
博客来源:http://blog.csdn.net/zhangao0086/article/details/6675436

面向对象的设计中,有一个特性封装性,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。

在Objective-C中也可以做到这一点。

比如下面这个类:

先是接口:

// =========================== 
// = File: SomeClass.h 
// = Interface for SomeClass 
// =========================== 
 
@interface SomeClass : NSObject 
 
-(void) msg; 
+(void) classMsg;  
 
@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的实现中调用了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; 


运行成功后应该可看到如下的显示:
Inside msg()...

Hidden instance method

Hidden class method.

Inside classMsg()...


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

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

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

相关推荐

    OOP-in-C C语言面向对象

    "OOP-in-C"这个主题就是探讨如何在C语言中实现面向对象编程。 **1. 封装:** 在C语言中,我们可以通过结构体来封装数据,再通过函数指针或者全局函数来处理结构体内的数据。这样可以隐藏数据的内部细节,实现数据的...

    Effective Objective-C 2.0&Obj;-C高级编程

    - 协议在Objective-C中扮演着接口的角色,定义了一组必须或可选的方法。通过遵循协议,对象可以实现多态性。 - 类别允许在不创建子类的情况下扩展已有类的功能,这对于添加分类或私有方法非常有用。 4. **Block...

    ShadeApps-Obj-C-Guide-RU:ПравиланаписаниякодаShadeAppsнаязыкепрограммирования

    - 实现接口(`.m`文件)包含私有属性和方法,以及接口中声明的实现细节。 5. **错误处理**: - 使用`NSException`处理运行时错误,使用`NSError`处理可恢复的错误。 - 使用`@try`、`@catch`、`@finally`进行异常...

    C语言下面向对象实现

    在C语言中实现面向对象(Object-Oriented Programming, OOP)的概念可能不如其他支持OOP的语言(如C++或Java)那样直接,但通过一些技巧和库,我们可以模拟出面向对象的特性。本工程文件是在Visual Studio 2010环境...

    Object-C pdf

    Extension则可以给类添加私有属性和方法,增加封装性。 **6. Blocks与GCD** Blocks是Objective-C中的匿名函数,可以作为参数传递或返回,常用于异步操作。Grand Central Dispatch (GCD)是Apple提供的并发编程框架,...

    C语言实现面向对象.zip

    但通过一些技巧和库,我们可以在C语言中模拟实现面向对象的概念。下面我们将详细探讨如何在C语言中实现面向对象编程。 首先,我们需要理解面向对象的基本概念。面向对象编程是一种编程范式,它基于“对象”的概念,...

    Objective -C 基础教程 的代码

    在Objective-C中,实例变量通常是私有的,可以通过setter和getter方法来访问和修改。 11. **代理模式(Delegate)**: 很多Objective-C的框架和控件使用代理设计模式,如UITableView。代理协议定义了控制行为的...

    Thinkphp3.2.2+Uploadify

    本文档详细介绍了如何在ThinkPHP 3.2.2框架中实现文件上传功能,包括基本的文件上传流程、生成缩略图的方法、头像上传处理以及更新用户头像的具体实现。这些知识点可以帮助开发者更好地理解和掌握文件上传相关的功能...

    面向對象編程C實現源碼

    这个"面向对象编程C实现源码"提供了一种在ANSI_C环境中模拟面向对象概念的方法。 在C语言中,面向对象的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装...

    C语言中结构体变量私有化详解

    本文将详细介绍C语言中结构体变量私有化的概念、实现方法和示例代码。 概念: 在C语言中,结构体是一种聚合数据类型, 由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构体可以被声明为变量、指针...

    08-python--writing-classes-特殊方法-属性

    而以双下划线`__`开头的属性(如特殊方法)则是私有的,不应直接访问。 ### 5. 属性装饰器(Property Decorators) Python提供了一个内置的`@property`装饰器,允许我们将对属性的访问转换为方法调用,从而实现...

    Object-C 学习笔记

    Objective-C(简称Obj-C或Objective C)是苹果公司基于C语言开发的一种面向对象编程语言,主要用于iOS和macOS平台的应用程序开发。它在C语言的基础上添加了Smalltalk风格的消息传递机制,使得面向对象编程更加灵活...

    用C实现面向对象编程

    ### 使用C语言实现面向对象编程 #### 前言与背景 本文旨在探索如何通过标准C语言(ANSI C)来模拟实现面向对象编程(OOP)。虽然C语言本身并不是面向对象的语言,但通过巧妙的设计和技术,我们可以在C中实现类似...

    iphone面试题

    Objective-C中没有直接的私有方法概念,但可以通过以下方式模拟: - 私有变量:使用`@private`关键字在`.m`文件中声明。 - 私有方法:虽然不能直接声明为私有,但在实际开发中可以通过在`.m`文件中定义未公开的方法...

    C++和Objective-C混编 如何在xcode中用C++的STL

    6. **暴露C++方法给Objective-C**:如果需要在Objective-C对象中调用C++方法,可以使用`@select`or`@protocol`来声明C++方法的接口,然后在C++实现中提供对应的函数。例如: ```objc @interface ...

    ObjC.pdf官方文档

    - 在Objective-C中,对象通过发送消息来调用方法。例如,`[object message]`表示向`object`发送一个名为`message`的消息。 #### 三、定义类 **1. 类的声明:** - 使用`@interface`关键字声明一个类。 - 示例:`@...

    OC与c++混编文件

    在类扩展中定义的C++方法可以包含方法体,并且可以访问类的私有属性。 3. **Objective-C++ Classes混编:** 直接在Objective-C++(`.mm`)文件中定义类,可以无缝集成OC和C++代码。在这种情况下,类既可以继承自...

    在PHP语言中使用JSON

    JSON基于JavaScript的一个子集,但其格式是独立于任何编程语言的,尽管它借鉴了C语言家族(如C、C++、C#、Java、JavaScript、Perl、Python等)的语法习惯。由于这些特点,JSON成为了理想的数据交互语言,尤其在网络...

Global site tag (gtag.js) - Google Analytics