gpt4 book ai didi

objective-c - 匿名类别或 "private"类别是否相同?

转载 作者:太空狗 更新时间:2023-10-30 03:15:22 25 4
gpt4 key购买 nike

对于声明私有(private)方法,在样式方面(以及功能方面,如果有什么不同的话),哪一个更好?

@interface MyClass()

@interface MyClass(private)

最佳答案

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

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

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

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

现在 @protocol 已经扩展到支持 Objective-C 2.0 中的 @optional 方法,形式 (2) 已经失宠了。

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

类扩展也可用于在@synthesize'ing 访问器之前将公共(public)只读@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

关于objective-c - 匿名类别或 "private"类别是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1052233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com