iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 如何声明实例变量和方法在类实例之外不可见或可用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我已经看过这个主题的一堆帖子.也许我没有遇到“一个”,有人会指向我这个方向.这个问题很简单,可能有一个简单的答案. 如果你有两个ivars,比如说“public_ivar”和“private_ivar”,你应该在哪里/你应该如何声明它们,以便公开是什么是公共的,什么是私有的不会以任何方式暴露给任何看头文件的人? 在“public_method”和“private_method”的情况下也是一样的问
我已经看过这个主题的一堆帖子.也许我没有遇到“一个”,有人会指向我这个方向.这个问题很简单,可能有一个简单的答案.

如果你有两个ivars,比如说“public_ivar”和“private_ivar”,你应该在哪里/你应该如何声明它们,以便公开是什么是公共的,什么是私有的不会以任何方式暴露给任何看头文件的人?

在“public_method”和“private_method”的情况下也是一样的问题.

我喜欢干净的头文件(在其他语言),只暴露方法和ivars我想让别人看到.你应该可以发布你的文件,而不会遇到有人访问他们不应该的东西的危险.你如何在客观C中做到这一点.

例如,我们假设我需要使用一个ivar来跟踪所有需要访问这些信息的各种类方法间的数据,计数器或类似的数据.如果这个ivar在传统的@interface标题下被宣布,那么它的存在是公开的,并且它可以被创建该类的一个实例的任何人使用.理想的情况是,这个ivar在类实现之外是不可见的.

解决方法

您可以在类扩展中声明实例变量或声明的属性.由于类扩展在实现文件(即不是头文件)中被声明,所以对于检查头文件的人来说,它们将不可见.例如,在头文件中:

@interface someClass : NSObject
@end

并在执行文件中:

@interface someClass ()
@property (nonatomic,assign) int privateInt;
@end

@implementation someClass

@synthesize privateInt;
…
@end

要么

@interface someClass () {
    int privateInt;
}
@end

@implementation someClass
…
@end

请注意,在运行时,没有任何东西阻止访问私有/类扩展实例变量(或类扩展中声明的属性的访问器方法).我写了一篇相当详细的文章,作为Stack Overflow另一个问题的答案:Does a private @property create an @private instance variable?

编辑:类扩展中的实例变量在WWDC 2010会话144中提供.

编辑:“使用Clang / LLVM 2.0编译器,您还可以在类扩展中声明属性和实例变量.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1

大佬总结

以上是大佬教程为你收集整理的iphone – 如何声明实例变量和方法在类实例之外不可见或可用?全部内容,希望文章能够帮你解决iphone – 如何声明实例变量和方法在类实例之外不可见或可用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。