jos*_*im5 16 private interface objective-c
What is the difference between a private method and a private interface? For example, I know that if you define a method in an implementation and its interface does not mention it, it is considered a private method. I have also seen things such as:
@interface Collector()
@property (readonly) NSMutableDictionary *count;
@end
Run Code Online (Sandbox Code Playgroud)
在.m实现文件中.
Nim*_*rod 20
@interface Foo()
在接口Foo上创建一个类扩展(我站得更正,支持到bbum),就像添加到接口的其他方法一样.有些人也使用@interafce Foo(Private)
(类别)而不是类扩展()
.它更像是从类外部"注入"新方法到类中.
将它放在.m文件中只是让其他东西不会在.h文件中"看到它",但就是这样.基本上人们通常在.m文件中使用类别或类扩展来指定私有接口,但它们也用于诸如UIKit使用类别添加row
和section
NSIndexPath的公共方法之类的东西.(这可能令人困惑.)
你真的不需要以这种方式定义私有方法,但如果你有一个名为bar的方法,在源文件中定义foo之前调用方法foo,你会得到一个编译器警告,例如"对象自身可能不响应foo" ".你可以在定义bar或任何其他foo调用代码之前通过定义foo来摆脱它.它与普通的C和函数相同.
就像Ole说这不会阻止任何人调用私有方法,它只是声明你的意图是私有的,并导致编译器生成"可能没有响应"警告,即使它们导入.h文件.
编辑
另请参阅http://www.friday.com/bbum/2009/09/11/class-extensions-explained/,了解类别与类扩展的一些解释.从编译器警告的角度看,类扩展应该更准确地定义私有方法,因为类别方法是可选的.希望我的书能够解释这个!
Ole*_*ann 18
Objective-C没有完全私有的方法.在.m文件的专用接口部分中声明的方法对外部调用者是不可见的,但它不是私有的.如果有人知道方法签名并忽略编译器警告,他们可以从外部调用它而不会出现问题.
归档时间: |
|
查看次数: |
11023 次 |
最近记录: |