博客来源: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语言中实现面向对象编程。 **1. 封装:** 在C语言中,我们可以通过结构体来封装数据,再通过函数指针或者全局函数来处理结构体内的数据。这样可以隐藏数据的内部细节,实现数据的...
- 协议在Objective-C中扮演着接口的角色,定义了一组必须或可选的方法。通过遵循协议,对象可以实现多态性。 - 类别允许在不创建子类的情况下扩展已有类的功能,这对于添加分类或私有方法非常有用。 4. **Block...
- 实现接口(`.m`文件)包含私有属性和方法,以及接口中声明的实现细节。 5. **错误处理**: - 使用`NSException`处理运行时错误,使用`NSError`处理可恢复的错误。 - 使用`@try`、`@catch`、`@finally`进行异常...
在C语言中实现面向对象(Object-Oriented Programming, OOP)的概念可能不如其他支持OOP的语言(如C++或Java)那样直接,但通过一些技巧和库,我们可以模拟出面向对象的特性。本工程文件是在Visual Studio 2010环境...
Extension则可以给类添加私有属性和方法,增加封装性。 **6. Blocks与GCD** Blocks是Objective-C中的匿名函数,可以作为参数传递或返回,常用于异步操作。Grand Central Dispatch (GCD)是Apple提供的并发编程框架,...
但通过一些技巧和库,我们可以在C语言中模拟实现面向对象的概念。下面我们将详细探讨如何在C语言中实现面向对象编程。 首先,我们需要理解面向对象的基本概念。面向对象编程是一种编程范式,它基于“对象”的概念,...
在Objective-C中,实例变量通常是私有的,可以通过setter和getter方法来访问和修改。 11. **代理模式(Delegate)**: 很多Objective-C的框架和控件使用代理设计模式,如UITableView。代理协议定义了控制行为的...
本文档详细介绍了如何在ThinkPHP 3.2.2框架中实现文件上传功能,包括基本的文件上传流程、生成缩略图的方法、头像上传处理以及更新用户头像的具体实现。这些知识点可以帮助开发者更好地理解和掌握文件上传相关的功能...
这个"面向对象编程C实现源码"提供了一种在ANSI_C环境中模拟面向对象概念的方法。 在C语言中,面向对象的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装...
本文将详细介绍C语言中结构体变量私有化的概念、实现方法和示例代码。 概念: 在C语言中,结构体是一种聚合数据类型, 由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构体可以被声明为变量、指针...
而以双下划线`__`开头的属性(如特殊方法)则是私有的,不应直接访问。 ### 5. 属性装饰器(Property Decorators) Python提供了一个内置的`@property`装饰器,允许我们将对属性的访问转换为方法调用,从而实现...
Objective-C(简称Obj-C或Objective C)是苹果公司基于C语言开发的一种面向对象编程语言,主要用于iOS和macOS平台的应用程序开发。它在C语言的基础上添加了Smalltalk风格的消息传递机制,使得面向对象编程更加灵活...
### 使用C语言实现面向对象编程 #### 前言与背景 本文旨在探索如何通过标准C语言(ANSI C)来模拟实现面向对象编程(OOP)。虽然C语言本身并不是面向对象的语言,但通过巧妙的设计和技术,我们可以在C中实现类似...
Objective-C中没有直接的私有方法概念,但可以通过以下方式模拟: - 私有变量:使用`@private`关键字在`.m`文件中声明。 - 私有方法:虽然不能直接声明为私有,但在实际开发中可以通过在`.m`文件中定义未公开的方法...
6. **暴露C++方法给Objective-C**:如果需要在Objective-C对象中调用C++方法,可以使用`@select`or`@protocol`来声明C++方法的接口,然后在C++实现中提供对应的函数。例如: ```objc @interface ...
- 在Objective-C中,对象通过发送消息来调用方法。例如,`[object message]`表示向`object`发送一个名为`message`的消息。 #### 三、定义类 **1. 类的声明:** - 使用`@interface`关键字声明一个类。 - 示例:`@...
在类扩展中定义的C++方法可以包含方法体,并且可以访问类的私有属性。 3. **Objective-C++ Classes混编:** 直接在Objective-C++(`.mm`)文件中定义类,可以无缝集成OC和C++代码。在这种情况下,类既可以继承自...
JSON基于JavaScript的一个子集,但其格式是独立于任何编程语言的,尽管它借鉴了C语言家族(如C、C++、C#、Java、JavaScript、Perl、Python等)的语法习惯。由于这些特点,JSON成为了理想的数据交互语言,尤其在网络...