无论如何,所以当我添加所有这些 *** 作,我希望能够以后访问排队的 *** 作来改变他们的优先级.不幸的是,每当我打电话 – [NSOperationQueue *** 作],我回来的都是一个空数组.最好的部分是,在放入一些控制台打印语句之后,尽管数组是空的,线程仍然在队列中并执行(由打印机指示)!
是什么赋予了?我也看了一下这个帐号,以确保它们都不会立即执行,而且似乎并非如此.
有任何想法吗?把我的头发拉出来.
编辑:还值得一提的是,在模拟器中运行时,相同的代码提供了一个完整的数组:(
解决方法 我通过 *** 作,发现它基本上在做:[self->data->lock lock];Nsstring* copy = [[self->data->operations copy] autorelease];[self->data->lock unlock];return copy;
除了在调用-autorelease之后,后续指令将覆盖包含唯一指向 *** 作队列的新副本的寄存器的指令.然后调用者只得到一个零返回值. “数据”字段是一个名为_NSOperationQueueData的内部类的实例,它具有字段:
NSRecursiveLock* lock;NSArray* operations;
我的解决方案是按照相同的逻辑进行子类化和重写 *** 作,但实际上返回数组副本.如果NSOperationQueue的内部与此修复程序不兼容,我添加了一些健康检查.仅当调用[super operations]实际上返回nil时才调用此重新实现.
如果苹果公司改变内部结构,这可能会在未来的 *** 作系统版本中破裂,但以某种方式避免实际修复这个错误.
#if TARGET_OS_IPHONE#import <objc/runtime.h>@interface _DLOperationQueueData : NSObject {@public ID lock; // <NSLocking> NSArray* operations;}@end@implementation _DLOperationQueueData; @end@interface _DLOperationQueueFix : NSObject {@public _DLOperationQueueData* data;}@end@implementation _DLOperationQueueFix; @end#endif@implementation DLOperationQueue#if TARGET_OS_IPHONE-(NSArray*) operations{ NSArray* operations = [super operations]; if (operations != nil) { return operations; } _DLOperationQueueFix* fix = (_DLOperationQueueFix*) self; _DLOperationQueueData* data = fix->data; if (strcmp(class_getname([data class]),"_NSOperationQueueData") != 0) { // this Hack kNows only the structure of _NSOperationQueueData // anything else,bail return operations; } if ([data->lock conformstoprotocol: @protocol(NSLocking)] == NO) { return operations; // not a lock,bail } [data->lock lock]; operations = [[data->operations copy] autorelease]; [data->lock unlock]; return operations; // you forgot something,Apple.}#endif@end
头文件是:
@interface DLOperationQueue : NSOperationQueue {}#if TARGET_OS_IPHONE-(NSArray*) operations;#endif@end总结
以上是内存溢出为你收集整理的iphone – – [NSOperationQueue *** 作]当不应该返回一个空数组?全部内容,希望文章能够帮你解决iphone – – [NSOperationQueue *** 作]当不应该返回一个空数组?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)