【问题标题】:What does double pointer mean in Objective-C? [duplicate]Objective-C中的双指针是什么意思? [复制]
【发布时间】:2013-02-27 09:16:14
【问题描述】:

我在 5 年的 Java 经验后开始学习 Objective-C,但不了解它的一些结构。这个 Some_Object** 是什么意思?例如这里的方法定义:

- (NSString *)checkLastUpdate:(NSUInteger)loggedId   
 returnMsgs:(NSMutableArray **)returnMsgs
 {
       ....
if (returnMsgs) 
 {
*returnMsgs = NewMsgs;
}
     }

它是指向指针的指针还是什么?使用它的原因是什么?

【问题讨论】:

  • 是的,它是指针到指针,它用于允许方法修改它无法返回的数据。这很可怕,但对于 C(Objective-C)来说是必要的,因为它缺少 C++ 和 Java 的引用。
  • 因为它容易出错且丑陋。

标签: ios objective-c pointers


【解决方案1】:

Pointer-to-pointer类型,在C语言中也是这样。

除了错误回调,我认为这不是一个好的行为。 例如,我们调用一个函数并需要错误信息以防函数失败:

- (id)handleData:(NSData *)inData error:(NSError **)outError;
{
if (inData == NULL || [inData length] == 0)
    {
    if (outError)
        *outError = [NSError errorWithDomain:kDataErrorDomain code:-1 userInfo:NULL];

我们可以这样调用:

NSError *error = NULL;
[self handleData:data error:&error];

if (error) {
    // Handle error

【讨论】:

  • if (outError) 怎么会是真的?
  • 我认为:if (*error) { // 处理错误
【解决方案2】:

NSMutableArray ** 表示它是一个容器,可以保存包含 NSMutableArray 的引用地址,例如

NSMutableArray * obj1; //obj1 can store reference of a mutable array
NSMutableArray ** obj2; // can contain address of obj1 that can store reference of a mutable array

最重要的是你可以在不同的场景中使用它

  • 如果您想从一个函数返回多个对象(可以是错误对象或其他)

【讨论】:

    【解决方案3】:

    这里函数将双指针 NSMutableArray 作为输出参数,并期望 NSMutableArray 实例将被初始化为 nil

    我认为以下是在这里使用双指针的用例,

    -(void)functionName{  
    NSMutableArray *pArray = nil;  
    
    NSString *update = [self checkLastUpdate:[self getLoggId] returnMsgs:&pArray ];
    
    }
    

    【讨论】:

    • 一个更经典的例子是很多API方法返回的NSError对象的使用。
    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2014-01-31
    相关资源
    最近更新 更多