gpt4 book ai didi

objective-c - 关于 Apple Cocoa 文档的问题

转载 作者:行者123 更新时间:2023-12-03 16:53:07 25 4
gpt4 key购买 nike

我正在缓慢但坚定地研究苹果的密集文档,但我真的必须问一个问题。下面给出示例代码:

#import "MonthArray.h"

@implementation MonthArray

static MonthArray *sharedMonthArray = nil;
static NSString *months[] = { @"January", @"February", @"March",
@"April", @"May", @"June", @"July", @"August", @"September",
@"October", @"November", @"December" };

+ monthArray
{
if (!sharedMonthArray) {
sharedMonthArray = [[MonthArray alloc] init];
}
return sharedMonthArray;
}

- (unsigned)count
{
return 12;
}

- objectAtIndex:(unsigned)index
{
if (index >= [self count])
[NSException raise:NSRangeException format:@"***%s: index
(%d) beyond bounds (%d)", sel_getName(_cmd), index,
[self count] - 1];
else
return months[index];
}

@end

这是我的问题(我很抱歉没有创建多个线程,但据我所知 - 这些都是相当基本的。)

  1. 显示 +monthArray 到底是什么意思?我知道 + 意味着它是一个类方法,但我不完全理解它的含义。它到底与普通方法有何不同?

  2. 这段代码对于整个sharedMonthArray ivar 的目的是什么?我的意思是,objectAtIndex: 方法是从月份的字符串中提取的,那么有什么意义呢?

  3. [self count]方法中的“self”是什么?我的意思是,我知道应该是几个月,但是我在程序中哪里可以看到它?是什么让 [self count] 计算月份而不计算 MonthArray 的数量?

抱歉,如果我的问题非常简单,我仍在学习 - 提前感谢您的帮助。

最佳答案

What exactly does it mean when it shows +monthArray? I know that the + means that it is a class method, but I don't entirely understand what implications that has. How exactly does it make it different than a normal method?

类方法是无需提供类实例即可调用的函数。在 Objective-C 中,通常按如下方式将消息发送到实例:[someObject someMethod]; 使用类方法,将消息发送到本身:[SomeClass someClassMethod];。类方法通常用于执行特定于该特定类的所有对象的操作,例如创建新实例(即工厂方法)或维护/更新全局类变量。

What is the purpose in this code for the whole sharedMonthArray ivar? I mean, the objectAtIndex: method is pulling from the months' strings, so what's the point?

sharedMonthArray 的目的是保存该类的单个公共(public)实例。每次调用 +monthArray 时都可以返回一个新实例,但这可能会浪费内存,因为实际上只需要一个实例。大多数 Cocoa 代码使用 NSArray 对象,而不是简单的 C 风格数组,因此这个单个实例就像一个 NSArray 包装器来隐藏静态 C -通过提供 NSArray 实例来从程序的其余部分获取数组。在内部,使用 C 样式数组是因为无法在编译时创建静态常量 NSArray 对象。

What is the "self" in the [self count] method? I mean, I understand that it is supposed to be the months, but where do I see that in the program? What makes [self count] count the months and not count the number of MonthArrays?

self 是一个自动变量,Objective-C 运行时用它来保存接收特定消息的对象。如果发送消息[someObject someMethod];,则会跳转到-someMethod方法,并且self的值将等于某个对象。在此示例中,self 将是发送 -objectAtIndex: 消息的 MonthArray 的实例。对[self count] 的调用将导致-count 方法被调用,并根据所示代码返回值12。

我想补充一点,这里显示的代码在 Cocoa 世界中是相当独特的。只有当您创建自己的框架时,您才会真正编写这样的代码。大多数 Cocoa 源代码不会使用 C 风格的数组。这个特定示例的目的是什么?这绝对不是 Cocoa 开发人员每天都会编写的代码。

关于objective-c - 关于 Apple Cocoa 文档的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636782/

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