有人可以__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示例.
我意识到这与现有帖子类似,(NSError**)错误是什么意思?,但我的问题有点不同.我理解双指针是如何工作的,以及这是常见的iOS API错误模式.我的问题更多的是关于单指针,以及为什么这段代码不起作用:
- (BOOL)someMethodWithError:(NSError *)error
{
...
if( errorOccured )
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
实施使用:
NSError *error = nil;
if( ![someObj someMethodWithError:error] )
{
NSLog(@"Error: %@", [error localizedDescription]);
}
Run Code Online (Sandbox Code Playgroud)
为什么方法实现中的赋值不会将指针重新分配给新的NSError对象?
我一直试图用最近的NSUserScriptTask类及其子类来做(看到这个和这个),到目前为止我已经解决了一些问题,但还有一些问题仍有待解决.从文档中可以看出,NSUserScriptTask不允许取消任务.因此,我决定创建一个简单的可执行文件,将脚本的路径作为参数并运行脚本.这样,我可以使用NSTask从我的主应用程序启动帮助程序,并[task terminate]在必要时调用.但是,我要求:
主应用程序的代码很简单:只需使用正确的信息启动NSTask即可.这就是我现在所拥有的(为了简单起见,我忽略了安全范围的书签之类的代码,这些代码都没有问题.但是不要忘记这是运行沙盒的):
// Create task
task = [NSTask new];
[task setLaunchPath: [[NSBundle mainBundle] pathForResource: @"ScriptHelper" ofType: @""]];
[task setArguments: [NSArray arrayWithObjects: scriptPath, nil]];
// Create error pipe
NSPipe* errorPipe = [NSPipe new];
[task setStandardError: errorPipe];
// Create output pipe
NSPipe* outputPipe = [NSPipe new];
[task setStandardOutput: outputPipe];
// Set termination handler
[task setTerminationHandler: ^(NSTask* task){
// Save output
NSFileHandle* outFile = [outputPipe fileHandleForReading];
NSString* output = [[NSString alloc] initWithData: …Run Code Online (Sandbox Code Playgroud) 有时我遇到的代码有*,有时**.任何人都可以解释它们在Objective C中的含义吗?(我曾经是一名Java程序员,具有C/C++经验.)
在下面的代码中,返回时,NSError在XCode中显示类型为"HomeViewController" - 我的一个视图控制器.如果我用双指针做了一些与众不同的事情,这是有道理的,但我没有.为什么会这样?我的代码中是否存在一些愚蠢的错误,核心数据中的错误或????
希望我不是自欺欺人!
self->ctx = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Street" inManagedObjectContext:self->ctx];
NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"street" ascending:YES];
NSArray* sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];
[request setEntity:entityDescription];
[request setSortDescriptors:sortDescriptors];
NSError * error;
NSArray *array = [self->ctx executeFetchRequest:request error:&error];
if(error!=nil){
NSLog(@"%@", @"Critical model error search");
}
_streets = array;
Run Code Online (Sandbox Code Playgroud)