gpt4 book ai didi

iphone - cocoa 界面风格

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:24 25 4
gpt4 key购买 nike

我正在做一个 iPhone 应用程序的项目。我们有一位 Cocoa 顾问来了几周。他向我展示了一个有趣的 Cocoa 惯用语,处理接口(interface),但我们之间存在一个困难的语言障碍,他无法真正解释为什么这样做或者它被记录在哪里,所以我可以自己学习更多。我进入了猴子模式,只是使用了他喜欢的风格。但一直困扰着我的是,我对这种风格的历史知之甚少。这当然不是非正式协议(protocol)。果然,查看 Cocoa API header 的一些,我有时会看到他断言的样式是“Cocoa”方式。这是一个示例(注意访问器、修改器等,每个都有自己的接口(interface)声明,没有有趣的大括号):

@interface AViewController : UIViewController <UITextViewDelegate> {

@public
UITableView *tableView;
@private
NSUInteger someIndex;
}

@property (nonatomic, retain) ...
@end

@interface AViewController (AViewControllerCreation)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withController:(id)controller;

@end

@interface AViewController (AViewControllerMutator)

- (void) doSomeSettingStuff;

@end

@interface AViewController (AViewControllerAccessor)

- (NSString *)doSomeAccessorStuff;

@end

@interface AViewController (AViewControllerAction)

- (IBAction)cancel:(id)sender;

@end

@interface AViewController (AViewControllerTableViewDelegate) <UITableViewDelegate, UITableViewDataSource>

@end

您可以在 NSButton、NSControl 等中看到这种设置界面的风格。有趣的是,相应的类,如 UIButton、UIControl DON'T 使用这种习惯用法。嗯,这些可能是在我认为 UIKit 是在 AppKit 之后完成的。那么这个成语是“old hat”吗?另外,除了风格之外还有什么原因吗?风格好吗?坏的?有没有关于这个的文档?谢谢大家。

最佳答案

这些在 Objective-C 中被称为“类别”。类别使同一个类可以有多个@interface 和@implementation block 。这甚至在您可以在标准 Apple 框架中的类上添加方法的范围内起作用,例如在 NSString 上添加一个类别以向其添加新方法。类别可以添加方法但不能添加实例变量,因此在您的示例中,第一个 @interface 是核心类声明,所有其他类别都是 AViewController 类上的类别。

这无论如何都不是“老帽子”,但您的示例将类别的使用带到了一个相当奇怪的极端。只要将一个类的实现分解为多个 block 在逻辑上有意义,例如,如果该类有一堆方法在逻辑上可以分为两个或多个组,那么类别就有意义。它们有时也用于通过将名为“private”的类别@interface 放在与@implementation 相同的文件中来声明伪私有(private)方法。 ObjC 的动态调度意味着没有私有(private)方法这样的东西,但这种方法避免了发布您不希望人们使用的方法的名称。

上面的例子实际上并没有错,但有点荒谬。这表明承包商的想法是,由于某种原因,每种新方法都应该始终有自己的类别,这是不正确的。

关于iphone - cocoa 界面风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371808/

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