了解Objective-C引用表示法

问题描述 投票:0回答:2

有人可以解释Objective-C的文档格式:

例如,

+ (id)arrayWithObject:(id)anObject
  1. 为什么加号?为什么在某些情况下会减号?当这些代码行出现在参考页面中每个任务的开头时,你们能帮助我准确理解格式是什么吗?
  2. 当方法定义如下时,它意味着什么: -(NSString *)description
  3. 为什么*在那里?它是指针的东西吗?为什么它的格式是这样的?
objective-c
2个回答
3
投票

为什么加号?为什么在某些情况下会减号?

加号表示该方法是类方法。你在类上调用它,它返回一个类的实例。所以:+arrayWithObject:会像这样调用:

NSArray *myArray = [NSArray arrayWithObject:someObject];

这将创建一个名为NSArray*myArray的单元素实例,其中包含对someObject的引用。

(为简洁起见,我不打算进入这种方法的内存管理方面,除了说autorelease将在myArray的生命周期结束时为你调用。此方法的另一个变体将返回一个保留的NSArray*实例你自己必须使用release,如果阵列需要超出其所处功能的生命周期,你可能更喜欢它。阅读Apple的Memory Management Programming Guide,或者阅读Objective-C教程或书籍。了解如何管理内存至关重要成功的Objective-C开发。)

减号表示该方法是实例方法。您在类的实例上调用它,并返回其他内容,如数字或其他对象。

举个例子,假设我们想知道我们刚刚制作的NSArray实例中的对象数量。所以我们在-count上调用myArray方法:

NSUInteger numberOfObjects = [myArray count];
NSLog(@"there are %u objects in myArray", numberOfObjects);

(注意在*之前没有NSUInteger。这是因为NSUInteger不是对象类型,而是Apple用于unsigned int C数据类型的另一个名称。)

-count实例方法的声明是:

-(NSUInteger)count;

这将在下面解释。

当方法定义如下时,这意味着什么:...为什么*存在?它是指针的东西吗?为什么它的格式是这样的?

以下方法:

-(NSString *)description

声明我们有一个名为-description的实例方法,它在类的实例上运行(无论该类可能是什么,比如NSArray*实例)并返回一个NSString*,它给出了该实例的description

请注意,此方法返回NSString*而不是NSString。那是因为这些函数传递引用或指向对象的指针,而不是对象本身。

如果我们在-description上调用myArray,假设它包含someObject,那么Xcode控制台将显示myArray及其内容的描述:

NSLog(@"%@", [myArray description]);

请注意,Apple提供了一个快捷方式,当与-description一起使用时,会在对象上自动调用NSLog()。所以你也可以做以下事情:

NSLog(@"%@", myArray);

为了在-description上打电话给myArray

因为在-description语句中对对象调用NSLog()是多余的,所以Objective-C开发人员首选第二种方法。


-1
投票

1.'+'表示该函数是静态的,而' - '表示该函数需要一个实例。静态函数是您不需要实例而是调用类的函数。通常这些是初始化程序,它们将向您返回自动释放实例。

是的,那是因为它是一个指向NSString目标C对象的指针

3. - (NSString *)描述

这意味着您正在查看doc的类具有一个名为description的方法,该方法在该类的实例上调用时将返回指向NSString对象的指针。

© www.soinside.com 2019 - 2024. All rights reserved.