相关疑难解决方法(0)

如何在Objective-c中将数组声明为常量?

以下代码给出了错误:

//  constants.h
extern NSArray const *testArray;
Run Code Online (Sandbox Code Playgroud)
//  constants.m
NSArray const *testArray = [NSArray arrayWithObjects:  @"foo", @"bar", nil];
Run Code Online (Sandbox Code Playgroud)

我得到的错误是
initializer element is not constant

或者,如果我拿走指针指针(*),我得到:
statically allocated instance of Objective-C class 'NSArray'

arrays constants objective-c

63
推荐指数
5
解决办法
8万
查看次数

处理ARC中的指针到指针所有权问题

假设对象A有一个属性:

@property (nonatomic, strong) Foo * bar;
Run Code Online (Sandbox Code Playgroud)

在实现中合成为:

@synthesize bar = _bar;
Run Code Online (Sandbox Code Playgroud)

对象B操纵a Foo **,如本示例中对象A的调用:

Foo * temp = self.bar;
[objB doSomething:&temp];
self.bar = temp;
Run Code Online (Sandbox Code Playgroud)
  • 这个或类似的东西可以合法地完成吗?
  • doSomething:方法的正确声明是什么?

此外,假设在我有机会设置属性之前可以释放对象Bbar(从而获取指向的实例的所有权temp) - 我如何告诉ARC切换拥有的引用?换句话说,如果我想让以下示例代码段起作用,我将如何处理ARC问题?

Foo * temp = self.bar;    // Give it a reference to some current value
[objB doSomething:&temp]; // Let it modify the reference
self.bar = nil;           // Basically release whatever we have
_bar = temp;              // Since we're …
Run Code Online (Sandbox Code Playgroud)

objective-c automatic-ref-counting

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

NSError和__autoreleasing

有人可以__autoreleasing在下面的示例代码块中向我解释一下目的吗?

- (void)execute:(NSError * __autoreleasing *)error {
    // do stuff, possibly assigning error if something went wrong
}
Run Code Online (Sandbox Code Playgroud)

我删除了__autoreleasing所有东西似乎仍然编译/运行正常.我开始使用obj-c后ARC,所以我从来没有真正学过/理解所有那些双下划线的东西.我已阅读ARC过渡指南,但我不完全了解他们的NSError示例.

objective-c automatic-ref-counting

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