iphone – 如何声明实例变量和方法在类实例之外不可见或可用?

iphone – 如何声明实例变量和方法在类实例之外不可见或可用?,第1张

概述我已经看过这个主题的一堆帖子.也许我没有遇到“一个”,有人会指向我这个方向.这个问题很简单,可能有一个简单的答案. 如果你有两个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 – 如何声明实例变量和方法在类实例之外不可见或可用?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1063213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存