当前位置:  开发笔记 > 编程语言 > 正文

匿名类别或"私人"类别是否相同?

如何解决《匿名类别或"私人"类别是否相同?》经验,为你挑选了1个好方法。



1> bbum..:

这两种语法有不同的用途.

命名类别 - @interface Foo(FooCategory) - 通常用于:

(1)通过添加功能扩展现有类.示例:Foundation中的NSAttributedString由AppKit中的类别扩展,该类别添加了AppKit特定的类似RTF的文本格式API.

(2)声明委托可能会或可能不会实现的一组方法.示例:各种类声明 - 但不实现 - @interface NSObject(SetODelegateMethods).

由于@protocol已经扩展到支持Objective-C 2.0中的@optional方法,因此表格(2)已经失宠了.

类扩展 - @interface Foo() - 旨在允许您声明用于实现类内部的其他私有API - SPI或系统编程接口.这通常出现在.m文件的顶部.在类扩展中声明的任何方法/属性必须在@implementation中实现,就像在public @interface中找到的方法/属性一样.

在@ synthesize访问器之前,类扩展也可用于重新声明公共只读@property作为读写.

例:

foo.h中

@interface Foo:NSObject
@property(readonly, copy) NSString *bar;
-(void) publicSaucing;
@end

Foo.m

@interface Foo()
@property(readwrite, copy) NSString *bar;
- (void) superSecretInternalSaucing;
@end

@implementation Foo
@synthesize bar;
.... must implement the two methods or compiler will warn ....
@end


是的,但只有getter在public头中声明,setter被私有声明在类本身内部使用.这不是C++,如果你想要反省运行时,你可以找到setter并在任何你想要的地方调用它,但除非你明确地这样做,否则如果你随意尝试设置属性,你将收到编译警告.
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有