相关疑难解决方法(0)

什么是(NSError**)错误?

示例:-save:方法NSManagedObjectContext声明如下:

- (BOOL)save:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

由于NSError已经是一个类,并且传递一个指针实际上会在实现中修改这个对象的效果,-save:这里将指针传递给指针有什么意义呢?什么是优势/感觉?

用法示例:

NSError *error;
if (![managedObjectContext save:&error]) {
    // Handle the error.
}
Run Code Online (Sandbox Code Playgroud)

iphone pointers objective-c

8
推荐指数
3
解决办法
3617
查看次数

无法理解NSError/NSObject指针传递行为

我现在对指针的指针很困惑,即使我已经读过为什么NSError需要双重间接?(指向指针的指针)NSError*vs NSError**等等.

我做了一些思考,仍然有一些问题.

在这里我写了这个:

NSError *error = [NSError errorWithDomain:@"before" code:0 userInfo:nil];
NSLog(@"outside error address: %p", &error];
[self doSomethingWithObj:nil error:&error];
Run Code Online (Sandbox Code Playgroud)

为了测试上面的NSError方法,我写了这个:

- (id)doSomethingWithObj:(NSObject *)obj error:(NSError *__autoreleasing *)error
{
    NSLog(@"inside error address: %p", error);
    id object = obj;
    if (object != nil)
    {
        return object;
    }
    else
    {
        NSError *tmp = [NSError errorWithDomain:@"after" code:0 userInfo:nil];
        *error = tmp;
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现两个日志记录地址不同.这是为什么?

2016-08-19 19:00:16.582 Test[4548:339654] outside error address: 0x7fff5b3e6a58
2016-08-19 19:00:16.583 Test[4548:339654] inside error address: …
Run Code Online (Sandbox Code Playgroud)

pointers objective-c nserror ios

6
推荐指数
1
解决办法
206
查看次数

C双指针

struct counter{
    long long counter;
}

struct instruction{
    struct counter *counter
    int repetitions;
    void (*work_fn)(long long *);
};

int ncounter; //number of counters
struct counter *counter; //counter array

int nthreads; //number of threads
int *ninstructions; //number of instructions

struct instruction **instructions; 
Run Code Online (Sandbox Code Playgroud)

这实际上是如何工作的?我遇到**指针问题

c

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

objective-c ×2

pointers ×2

c ×1

ios ×1

iphone ×1

nserror ×1