`
NNI2567
  • 浏览: 554 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

[iOS]关于Objective C的私有函数

阅读更多
原文地址http://www.2cto.com/kf/201312/263903.html

(1)很多从其他语言(例如C++)转到objective c的初学者,往往会问到一个问题,如何定义类的私有函数?这里的“私有函数”指的是,某个函数只能在类的内部使用,不能在类的外部,或者派生类内部使用。事实上,Objective C中可以定义类的私有变量,但由于objective c是动态语言,因此本质上是不存在私有函数的。但是,也可以用一些机制,来实现类似其他语言中私有函数的效果。



(2)一般来说,可以使用两种方式来实现。

第一种:只在.m文件中实现该函数,不在.h文件中声明,这样是最简单的方式。


.h文件
@interfaceMyClass
{
    // My Instance Variables
}
- (void)myPublicMethod;
@end

.m 文件:
@implementationMyClass
- (void)myPublicMethod
{
    // Implementation goes here
}
- (void)myPrivateMethod
{
    // Implementation goes here
}
@end

上面的myPrivateMethod函数只在m文件中实现了,没有在h文件中声明,那么外部就不能使用:[obj  myPrivateMethod]的方式调用,在派生类中也不能使用[super myPrivateMethod] 或者[self myPrivateMethod]的方式来调用。



  第二种:在m文件中加上一个oc extension,在里面声明需要的私有函数。


.h 文件:
@interfaceMyClass
{
   // My Instance Variables
}
- (void)myPublicMethod;
@end

.m 文件:
@interfaceMyClass()
- (void)myPrivateMethod;
@end

@implementationMyClass
- (void)myPublicMethod
{
    // Implementation goes here
}
- (void)myPrivateMethod
{
    // Implementation goes here
}
@end

以上两种方式,功能完全一样,区别仅仅在于,团队开发时,后面一种的代码可读性更好,所以一般还是推荐后面一种方式。

(3)前面已经提到,对于Objective C来说,真正意义上的私有函数是不存在的。因为即使用上述的方法,不在头文件中声明函数,外部也可以使用objc_msgSend或者performSelector来调用这个函数。 比如上面的myPrivateMethod,在类的外部可以直接使用[obj performSelector:@selector(myPrivateMethod)]… 来调用。有人说performSelector只能传一个参数,那么使用objc_msgSend(obj, @selector, …),就可以传N个参数了。所以说,用上面的机制,可以实现类似其他语言中“私有函数”的效果,但并不能完全保证这个函数是私有的。

备注:在下面附上的帖子里有人提到,可以用一个外部的block来实现私有函数,但是这其实意义不大,因为在外部的block里面是不能访问类的self的,已经不算是成员函数了。
分享到:
评论

相关推荐

    IOS7最新私有API

    标题“iOS7最新私有API”暗示了这是一份关于iOS 7系统中私有API的资料,可能包含了Objective-C语言实现的接口和方法。在这个阶段,iOS 7是相对较旧的版本,但对开发者来说,了解过去版本的私有API有助于理解iOS系统...

    iOS Objective-C 编码规文档

    《iOS Objective-C编码规范详解》 Objective-C是iOS开发的核心编程语言,良好的编码规范能提升代码的可读性、可维护性,使团队协作更为高效。以下是对iOS Objective-C编码规范的详细说明: 1. **语言选择**: 在...

    ios oc手动代码混淆函数名和变量名demo

    在iOS开发中,为了增强应用的安全性,开发者有时会选择对Objective-C(OC)代码进行混淆处理,以防止恶意用户逆向工程分析。本教程将详细解释如何手动进行函数名和变量名的混淆,并提供一个实际的OC代码混淆示例。 ...

    The Objective-C Programming Language

    Objective-C是一种通用、面向对象的编程语言,它是在C语言的基础上扩展而成的。Objective-C是苹果公司在开发macOS和iOS应用时的主要语言之一,尤其是在iOS开发初期。该语言的设计哲学强调了消息传递和动态类型。...

    Objective-C程序设计

    首先,Objective-C是在C语言基础上扩展的,它引入了消息传递机制和类的概念,这使得它具有高度的灵活性和可扩展性。在Objective-C中,对象通过发送消息来执行操作,这种机制类似于其他语言中的方法调用。消息传递的...

    ios 对象私有属性的访问和修改

    在iOS开发中,有时我们需要访问或修改对象的私有属性,以便进行更深层次的调试或定制。本文将详细探讨两种主要方法:Key-Value Coding(KVC)和Runtime技术。 首先,Key-Value Coding(KVC)是Objective-C提供的一...

    Effective Objective-C 2.0 中文版.zip

    《Effective Objective-C 2.0》是一本针对iOS和Mac OS X开发者的经典书籍,它深入探讨了Objective-C编程语言的高效使用方法。这本书由Mattt Thompson撰写,旨在帮助开发者写出更加优雅、可维护和高性能的代码。中文...

    从C++到Objective C的学习之路

    C++起源于C语言,强调面向对象编程,而Objective C则是在C的基础上扩展了面向对象特性,主要用于苹果的iOS和Mac OS X开发。从C++过渡到Objective C的学习之旅是一条富有挑战的道路,但同时也充满了机遇。以下是一些...

    Objective-C培训教程

    Objective-C是一种面向对象的编程语言,它是C语言的一个超集,并且是用于Mac OS和iOS应用开发的主要语言。它具有动态绑定、内存管理、面向对象的特性,允许开发者编写高效和可重用的代码。 第一章程序整体语法结构...

    Objective-C基础教程源代码 Learn objective-C on the Mac Mark Dalrymple著书

    Objective-C是一种强大的面向对象编程语言,特别是在Apple的iOS和macOS平台上广泛使用。它是C语言的超集,融入了Smalltalk的关键概念,如消息传递和动态类型。《Learn Objective-C on the Mac》由Mark Dalrymple撰写...

    Objective-C的语法与Cocoa框架

    Objective-C在C语言的基础上扩展了Smalltalk的面向对象特性,使得它成为Cocoa框架的基础。Cocoa框架是Apple开发的用于构建Mac和iOS应用程序的一组库和服务。 首先,Objective-C的语法特性包括: 1. **消息传递**:...

    objective-c 编程

    Objective-C是由C语言发展而来,融入了Smalltalk的面向对象特性,因此它结合了C的简洁性和面向对象的灵活性。 1. **面向对象编程基础**: Objective-C的核心是它的面向对象特性,包括类(Class)、对象(Object)...

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

    Objective-C是一种强大的面向对象的编程语言,特别是在iOS和macOS应用开发中占据核心地位。"Effective Objective-C 2.0&Obj-C高级编程"这个压缩包文件包含了关于这个语言的深入学习资料,旨在帮助开发者提升他们的...

    Objective-C 2.0 with Cocoa Foundation(中文)

    Objective-C 主要用于 macOS 和 iOS 应用程序的开发。它不仅能够直接调用 C 和 C++ 代码,还提供了动态类型和动态绑定等高级功能。 ##### 1.2 Cocoa Foundation 概述 Cocoa Foundation 是一套核心框架库,为开发者...

    Objective-C基础教程和源码

    Objective-C是一种面向对象的编程语言,它是Apple的iOS和macOS操作系统的核心开发语言。这篇教程旨在帮助初学者理解和掌握Objective-C的基础知识,并通过源码实践加深理解。 Objective-C的起源可以追溯到C语言,它...

    Objective-C程序设计第6版(完整高清带目录)

    Objective-C扩展了C语言,添加了消息传递机制和面向对象特性。消息传递是通过“-”或“+”符号进行的,分别代表实例方法和类方法。例如,你可以向一个对象发送一个消息`[myObject performTask:]`来执行特定的任务。 ...

    objective-c 2.0 课后习题答案

    Objective-C 2.0 是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,主要用于iOS和macOS的应用程序开发。Objective-C 2.0在Objective-C的基础上添加了一些新特性,使得代码更加简洁易读,提高了开发效率。...

    【Objective-C.Phrasebook.2nd.Edition】[PDF+源代码] [iPhone/iPad/iOS]

    《Objective-C Phrasebook》第二版是一本专注于iOS和Mac OS X平台开发的编程书籍,它以PDF格式提供,并附带了源代码。本书是为那些希望深入理解Objective-C语言并以此构建iPhone、iPad以及iOS应用的开发者而设计的。...

    Objective -C 基础教程 的代码

    Objective-C 是基于C语言的,它添加了消息传递机制、类和协议等面向对象的特性。消息传递是Objective-C中的核心概念,通过`[receiver message]`的形式进行调用。类定义了对象的结构和行为,而协议则允许实现接口...

    Objective-C2.0程序设计 答案

    Objective-C是一种面向对象的编程语言,它是C语言的超集,主要用于Apple的Mac OS X和iOS操作系统。在Objective-C2.0中,苹果引入了一些改进和优化,使其更易用且效率更高。以下是对Objective-C2.0程序设计中一些关键...

Global site tag (gtag.js) - Google Analytics