Objective c 带有依赖项的NSOperationQueue错误

Objective c 带有依赖项的NSOperationQueue错误,objective-c,nsoperationqueue,Objective C,Nsoperationqueue,我正在使用NSOperation和NSOperationQueue执行一系列操作,它们都是相互依赖的(2对1,3对2,等等)。我在创建操作后设置依赖项。当队列完成时,我遇到了一些问题:程序在代码的_release部分崩溃,显然是在操作被释放时。请注意,它们都在队列的末尾被释放,因为它只在最后一个队列之后,而最后一个队列依赖于第二个最后一个队列,这取决于等等。。。他们可以被释放。如果删除任何依赖项,代码运行良好。如果我将waituntillfinished:更改为NO,它将崩溃,如果更改为YES,

我正在使用NSOperation和NSOperationQueue执行一系列操作,它们都是相互依赖的(2对1,3对2,等等)。我在创建操作后设置依赖项。当队列完成时,我遇到了一些问题:程序在代码的_release部分崩溃,显然是在操作被释放时。请注意,它们都在队列的末尾被释放,因为它只在最后一个队列之后,而最后一个队列依赖于第二个最后一个队列,这取决于等等。。。他们可以被释放。如果删除任何依赖项,代码运行良好。如果我将waituntillfinished:更改为NO,它将崩溃,如果更改为YES,它不会崩溃

我已将问题隔离到以下代码,该代码不使用任何自定义类。默认情况下,NSOperation是一个完全不执行任何操作的类。然而,当所有操作都完成时,这仍然会崩溃。因此,我似乎没有正确使用NSOperationQueue,但看不出有什么问题。我正在运行10.9,我注意到一般来说,Maverick 10.9比10.8对这些问题更加敏感

我使用菜单项从主线程调用此方法:

- (void) testOperations:(id)object  
{

        NSOperationQueue* queue = [ [ NSOperationQueue alloc ] init ];

        NSMutableArray* array = [ NSMutableArray array ];
        for ( int i = 0; i < 10000; i++)
            [ array addObject: [[[ NSOperation alloc ] init ] autorelease ] ];

        for ( int i = 1; i < [ array count ]; i++)
            [[ array objectAtIndex:i ] addDependency:[array objectAtIndex:i-1]]; // remove this and no crash

        [ queue addOperations: array waitUntilFinished:NO ]; // Change to YES, no crash
        [ queue autorelease ]; // or release, it does not make a difference, in fact leaking the memory makes no difference: the code crashes when the queue is removing the NSOperations
}
-(void)testOperations:(id)对象
{
NSOperationQueue*队列=[[NSOperationQueue alloc]init];
NSMutableArray*数组=[NSMutableArray];
对于(int i=0;i<10000;i++)
[array addObject:[[[NSOperation alloc]init]自动释放]];
对于(int i=1;i<[数组计数];i++)
[[array objectAtIndex:i]addDependency:[array objectAtIndex:i-1]];//删除此项不会导致崩溃
[queue addOperations:array waitUntilFinished:NO];//更改为是,无崩溃
[queue autorelease];//或者release,这没有什么区别,事实上,泄漏内存也没有什么区别:当队列删除操作时,代码崩溃
}
这将在以下情况下每次崩溃: bool objc::DenseMapBase>,objc_object*,无符号长,objc::DenseMapInfo,true>:(EXC_BAD_访问)

完整堆栈是:

#0  0x9104d81b in objc::DenseMapBase<objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >, objc_object*, unsigned long, objc::DenseMapInfo<objc_object*>, true>::find(objc_object* const&) ()
#1  0x910384e3 in _objc_rootReleaseWasZero ()
#2  0x9104d5d9 in -[NSObject release] ()
#3  0x99e41224 in CFRelease ()
#4  0x99e56277 in -[__NSArrayM dealloc] ()
#5  0x9104d5ef in -[NSObject release] ()
#6  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#7  0x9104d5ef in -[NSObject release] ()
#8  0x97f62ac8 in -[NSOperation dealloc] ()
#9  0x9104d5ef in -[NSObject release] ()
#10 0x99e41224 in CFRelease ()
#11 0x99e56277 in -[__NSArrayM dealloc] ()
#12 0x9104d5ef in -[NSObject release] ()
#13 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#14 0x9104d5ef in -[NSObject release] ()
#15 0x97f62ac8 in -[NSOperation dealloc] ()
#16 0x9104d5ef in -[NSObject release] ()
#17 0x99e41224 in CFRelease ()
#18 0x99e56277 in -[__NSArrayM dealloc] ()
#19 0x9104d5ef in -[NSObject release] ()
#20 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#21 0x9104d5ef in -[NSObject release] ()
#22 0x97f62ac8 in -[NSOperation dealloc] ()
#23 0x9104d5ef in -[NSObject release] ()
#24 0x99e41224 in CFRelease ()
#25 0x99e56277 in -[__NSArrayM dealloc] ()
#26 0x9104d5ef in -[NSObject release] ()
#27 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#28 0x9104d5ef in -[NSObject release] ()
#29 0x97f62ac8 in -[NSOperation dealloc] ()
#30 0x9104d5ef in -[NSObject release] ()
#31 0x99e41224 in CFRelease ()
#32 0x99e56277 in -[__NSArrayM dealloc] ()
#33 0x9104d5ef in -[NSObject release] ()
#34 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#35 0x9104d5ef in -[NSObject release] ()
#36 0x97f62ac8 in -[NSOperation dealloc] ()
#37 0x9104d5ef in -[NSObject release] ()
#38 0x99e41224 in CFRelease ()
#39 0x99e56277 in -[__NSArrayM dealloc] ()
#40 0x9104d5ef in -[NSObject release] ()
#41 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#42 0x9104d5ef in -[NSObject release] ()
#43 0x97f62ac8 in -[NSOperation dealloc] ()
#44 0x9104d5ef in -[NSObject release] ()
#45 0x99e41224 in CFRelease ()
#46 0x99e56277 in -[__NSArrayM dealloc] ()
#47 0x9104d5ef in -[NSObject release] ()
#48 0x97f62b22 in -[__NSOperationInternal dealloc] ()
#49 0x9104d5ef in -[NSObject release] ()
#50 0x97f62ac8 in -[NSOperation dealloc] ()
#10722  0x9104d5ef in -[NSObject release] ()
#10723  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10724  0x9104d5ef in -[NSObject release] ()
#10725  0x97f62ac8 in -[NSOperation dealloc] ()
#10726  0x9104d5ef in -[NSObject release] ()
#10727  0x99e41224 in CFRelease ()
#10728  0x99e56277 in -[__NSArrayM dealloc] ()
#10729  0x9104d5ef in -[NSObject release] ()
#10730  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10731  0x9104d5ef in -[NSObject release] ()
#10732  0x97f62ac8 in -[NSOperation dealloc] ()
#10733  0x9104d5ef in -[NSObject release] ()
#10734  0x99e41224 in CFRelease ()
#10735  0x99e56277 in -[__NSArrayM dealloc] ()
#10736  0x9104d5ef in -[NSObject release] ()
#10737  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10738  0x9104d5ef in -[NSObject release] ()
#10739  0x97f62ac8 in -[NSOperation dealloc] ()
#10740  0x9104d5ef in -[NSObject release] ()
#10741  0x99e41224 in CFRelease ()
#10742  0x99e56277 in -[__NSArrayM dealloc] ()
#10743  0x9104d5ef in -[NSObject release] ()
#10744  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10745  0x9104d5ef in -[NSObject release] ()
#10746  0x97f62ac8 in -[NSOperation dealloc] ()
#10747  0x9104d5ef in -[NSObject release] ()
#10748  0x99e41224 in CFRelease ()
#10749  0x99e56277 in -[__NSArrayM dealloc] ()
#10750  0x9104d5ef in -[NSObject release] ()
#10751  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10752  0x9104d5ef in -[NSObject release] ()
#10753  0x97f62ac8 in -[NSOperation dealloc] ()
#10754  0x9104d5ef in -[NSObject release] ()
#10755  0x99e41224 in CFRelease ()
#10756  0x99e56277 in -[__NSArrayM dealloc] ()
#10757  0x9104d5ef in -[NSObject release] ()
#10758  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10759  0x9104d5ef in -[NSObject release] ()
#10760  0x97f62ac8 in -[NSOperation dealloc] ()
#10761  0x9104d5ef in -[NSObject release] ()
#10762  0x99e41224 in CFRelease ()
#10763  0x99e56277 in -[__NSArrayM dealloc] ()
#10764  0x9104d5ef in -[NSObject release] ()
#10765  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10766  0x9104d5ef in -[NSObject release] ()
#10767  0x97f62ac8 in -[NSOperation dealloc] ()
#10768  0x9104d5ef in -[NSObject release] ()
#10769  0x99e41224 in CFRelease ()
#10770  0x99e56277 in -[__NSArrayM dealloc] ()
#10771  0x9104d5ef in -[NSObject release] ()
#10772  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10773  0x9104d5ef in -[NSObject release] ()
#10774  0x97f62ac8 in -[NSOperation dealloc] ()
#10775  0x9104d5ef in -[NSObject release] ()
#10776  0x99e41224 in CFRelease ()
#10777  0x99e56277 in -[__NSArrayM dealloc] ()
#10778  0x9104d5ef in -[NSObject release] ()
#10779  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10780  0x9104d5ef in -[NSObject release] ()
#10781  0x97f62ac8 in -[NSOperation dealloc] ()
#10782  0x9104d5ef in -[NSObject release] ()
#10783  0x99e41224 in CFRelease ()
#10784  0x99e56277 in -[__NSArrayM dealloc] ()
#10785  0x9104d5ef in -[NSObject release] ()
#10786  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10787  0x9104d5ef in -[NSObject release] ()
#10788  0x97f62ac8 in -[NSOperation dealloc] ()
#10789  0x9104d5ef in -[NSObject release] ()
#10790  0x99e41224 in CFRelease ()
#10791  0x99e56277 in -[__NSArrayM dealloc] ()
#10792  0x9104d5ef in -[NSObject release] ()
#10793  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10794  0x9104d5ef in -[NSObject release] ()
#10795  0x97f62ac8 in -[NSOperation dealloc] ()
#10796  0x9104d5ef in -[NSObject release] ()
#10797  0x99e41224 in CFRelease ()
#10798  0x99e56277 in -[__NSArrayM dealloc] ()
#10799  0x9104d5ef in -[NSObject release] ()
#10800  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10801  0x9104d5ef in -[NSObject release] ()
#10802  0x97f62ac8 in -[NSOperation dealloc] ()
#10803  0x9104d5ef in -[NSObject release] ()
#10804  0x99e41224 in CFRelease ()
#10805  0x99e56277 in -[__NSArrayM dealloc] ()
#10806  0x9104d5ef in -[NSObject release] ()
#10807  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10808  0x9104d5ef in -[NSObject release] ()
#10809  0x97f62ac8 in -[NSOperation dealloc] ()
#10810  0x9104d5ef in -[NSObject release] ()
#10811  0x99e41224 in CFRelease ()
#10812  0x99e56277 in -[__NSArrayM dealloc] ()
#10813  0x9104d5ef in -[NSObject release] ()
#10814  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10815  0x9104d5ef in -[NSObject release] ()
#10816  0x97f62ac8 in -[NSOperation dealloc] ()
#10817  0x9104d5ef in -[NSObject release] ()
#10818  0x99e41224 in CFRelease ()
#10819  0x99e56277 in -[__NSArrayM dealloc] ()
#10820  0x9104d5ef in -[NSObject release] ()
#10821  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10822  0x9104d5ef in -[NSObject release] ()
#10823  0x97f62ac8 in -[NSOperation dealloc] ()
#10824  0x9104d5ef in -[NSObject release] ()
#10825  0x99e41224 in CFRelease ()
#10826  0x99e56277 in -[__NSArrayM dealloc] ()
#10827  0x9104d5ef in -[NSObject release] ()
#10828  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10829  0x9104d5ef in -[NSObject release] ()
#10830  0x97f62ac8 in -[NSOperation dealloc] ()
#10831  0x9104d5ef in -[NSObject release] ()
#10832  0x99e41224 in CFRelease ()
#10833  0x99e56277 in -[__NSArrayM dealloc] ()
#10834  0x9104d5ef in -[NSObject release] ()
#10835  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10836  0x9104d5ef in -[NSObject release] ()
#10837  0x97f62ac8 in -[NSOperation dealloc] ()
#10838  0x9104d5ef in -[NSObject release] ()
#10839  0x99e41224 in CFRelease ()
#10840  0x99e56277 in -[__NSArrayM dealloc] ()
#10841  0x9104d5ef in -[NSObject release] ()
#10842  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10843  0x9104d5ef in -[NSObject release] ()
#10844  0x97f62ac8 in -[NSOperation dealloc] ()
#10845  0x9104d5ef in -[NSObject release] ()
#10846  0x99e41224 in CFRelease ()
#10847  0x99e56277 in -[__NSArrayM dealloc] ()
#10848  0x9104d5ef in -[NSObject release] ()
#10849  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10850  0x9104d5ef in -[NSObject release] ()
#10851  0x97f62ac8 in -[NSOperation dealloc] ()
#10852  0x9104d5ef in -[NSObject release] ()
#10853  0x99e41224 in CFRelease ()
#10854  0x99e56277 in -[__NSArrayM dealloc] ()
#10855  0x9104d5ef in -[NSObject release] ()
#10856  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10857  0x9104d5ef in -[NSObject release] ()
#10858  0x97f62ac8 in -[NSOperation dealloc] ()
#10859  0x9104d5ef in -[NSObject release] ()
#10860  0x99e41224 in CFRelease ()
#10861  0x99e56277 in -[__NSArrayM dealloc] ()
#10862  0x9104d5ef in -[NSObject release] ()
#10863  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10864  0x9104d5ef in -[NSObject release] ()
#10865  0x97f62ac8 in -[NSOperation dealloc] ()
#10866  0x9104d5ef in -[NSObject release] ()
#10867  0x99e41224 in CFRelease ()
#10868  0x99e56277 in -[__NSArrayM dealloc] ()
#10869  0x9104d5ef in -[NSObject release] ()
#10870  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10871  0x9104d5ef in -[NSObject release] ()
#10872  0x97f62ac8 in -[NSOperation dealloc] ()
#10873  0x9104d5ef in -[NSObject release] ()
#10874  0x99e41224 in CFRelease ()
#10875  0x99e56277 in -[__NSArrayM dealloc] ()
#10876  0x9104d5ef in -[NSObject release] ()
#10877  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10878  0x9104d5ef in -[NSObject release] ()
#10879  0x97f62ac8 in -[NSOperation dealloc] ()
#10880  0x9104d5ef in -[NSObject release] ()
#10881  0x99e41224 in CFRelease ()
#10882  0x99e56277 in -[__NSArrayM dealloc] ()
#10883  0x9104d5ef in -[NSObject release] ()
#10884  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10885  0x9104d5ef in -[NSObject release] ()
#10886  0x97f62ac8 in -[NSOperation dealloc] ()
#10887  0x9104d5ef in -[NSObject release] ()
#10888  0x99e41224 in CFRelease ()
#10889  0x99e56277 in -[__NSArrayM dealloc] ()
#10890  0x9104d5ef in -[NSObject release] ()
#10891  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10892  0x9104d5ef in -[NSObject release] ()
#10893  0x97f62ac8 in -[NSOperation dealloc] ()
#10894  0x9104d5ef in -[NSObject release] ()
#10895  0x99e41224 in CFRelease ()
#10896  0x99e56277 in -[__NSArrayM dealloc] ()
#10897  0x9104d5ef in -[NSObject release] ()
#10898  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10899  0x9104d5ef in -[NSObject release] ()
#10900  0x97f62ac8 in -[NSOperation dealloc] ()
#10901  0x9104d5ef in -[NSObject release] ()
#10902  0x99e41224 in CFRelease ()
#10903  0x99e56277 in -[__NSArrayM dealloc] ()
#10904  0x9104d5ef in -[NSObject release] ()
#10905  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10906  0x9104d5ef in -[NSObject release] ()
#10907  0x97f62ac8 in -[NSOperation dealloc] ()
#10908  0x9104d5ef in -[NSObject release] ()
#10909  0x99e41224 in CFRelease ()
#10910  0x99e56277 in -[__NSArrayM dealloc] ()
#10911  0x9104d5ef in -[NSObject release] ()
#10912  0x97f62b22 in -[__NSOperationInternal dealloc] ()
#10913  0x9104d5ef in -[NSObject release] ()
#10914  0x97f62ac8 in -[NSOperation dealloc] ()
#10915  0x9104d5ef in -[NSObject release] ()
#10916  0x97f49cca in __NSOQSchedule_f ()
#10917  0x9c1c9e21 in _dispatch_async_redirect_invoke ()
#10918  0x9c1c53a6 in _dispatch_client_callout ()
#10919  0x9c1c7467 in _dispatch_root_queue_drain ()
#10920  0x9c1c8732 in _dispatch_worker_thread2 ()
#10921  0x960c2dab in _pthread_wqthread ()
objc::DenseMapBase::find(objc_object*const&)中的0 0x9104d81b #1 0x910384e3在_objc_rootReleaseWasZero()中 #2 0x9104d5d9英寸-[NSObject release]() #CFRelease()中的3 0x99e41224 #4 0x99e56277英寸-[\uu NSArrayM dealloc]() #5 0x9104d5ef输入-[NSObject释放]() #6 0x97f62b22英寸-[\uu n操作内部解除锁定]() #7 0x9104d5ef输入-[NSObject释放]() #8 0x97f62ac8 in-[NSOperation dealloc]() #9 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10 0x99e41224 #11 0x99e56277英寸-[\uu NSArrayM dealloc]() #12 0x9104d5ef输入-[NSObject释放]() #13 0x97f62b22英寸-[\uu n操作内部解除锁定]() #14 0x9104d5ef输入-[NSObject释放]() #15 0x97f62ac8 in-[NSOperation dealloc]() #16 0x9104d5ef输入-[NSObject释放]() #17 0x99e41224在CFR版本中() #18 0x99e56277英寸-[[uuu NSArrayM dealloc]() #19 0x9104d5ef输入-[NSObject释放]() #20 0x97f62b22英寸-[\uu n操作内部解除锁定]() #21 0x9104d5ef输入-[NSObject释放]() #22 0x97f62ac8 in-[NSOperation dealloc]() #23 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的24 0x99e41224 #25 0x99e56277英寸-[\uu NSArrayM dealloc]() #26 0x9104d5ef输入-[NSObject释放]() #27 0x97f62b22英寸-[\uu n操作内部解除锁定]() #28 0x9104d5ef输入-[NSObject释放]() #29 0x97f62ac8 in-[NSOperation dealloc]() #30 0x9104d5ef输入-[NSObject释放]() #CFRelease中的31 0x99e41224() #32 0x99e56277英寸-[\uu NSArrayM dealloc]() #33 0x9104d5ef输入-[NSObject释放]() #34 0x97f62b22英寸-[\uu n操作内部解除锁定]() #35 0x9104d5ef输入-[NSObject释放]() #36 0x97f62ac8 in-[NSOperation dealloc]() #37 0x9104d5ef输入-[NSObject释放]() #38 0x99e41224英寸CFR释放() #39 0x99e56277英寸-[\uu NSArrayM dealloc]() #40 0x9104d5ef输入-[NSObject释放]() #41 0x97f62b22英寸-[\uu n操作内部解除锁定]() #42 0x9104d5ef输入-[NSObject释放]() #43 0x97f62ac8 in-[NSOperation dealloc]() #44 0x9104d5ef输入-[NSObject释放]() #45 0x99e41224英寸CFR释放() #46 0x99e56277英寸-[\uu NSArrayM dealloc]() #47 0x9104d5ef输入-[NSObject释放]() #48 0x97f62b22英寸-[\uu n操作内部解除锁定]() #49 0x9104d5ef输入-[NSObject释放]() #50 0x97f62ac8英寸-[NSOperation dealloc]() #10722 0x9104d5ef输入-[NSObject释放]() #10723 0x97f62b22英寸-[\uu n操作内部解除锁定]() #10724 0x9104d5ef输入-[NSObject释放]() #10725 0x97f62ac8 in-[NSOperation dealloc]() #10726 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10727 0x99e41224 #10728 0x99e56277英寸-[\uu NSArrayM dealloc]() #10729 0x9104d5ef输入-[NSObject释放]() #10730 0x97f62b22英寸-[\uu n操作内部解除锁定]() #10731 0x9104d5ef输入-[NSObject释放]() #10732 0x97f62ac8 in-[NSOperation dealloc]() #10733 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10734 0x99e41224 #10735 0x99e56277英寸-[\uu NSArrayM dealloc]() #10736 0x9104d5ef输入-[NSObject释放]() #10737 0x97f62b22英寸-[\uu n操作内部解除锁定]() #10738 0x9104d5ef输入-[NSObject释放]() #10739 0x97f62ac8 in-[NSOperation dealloc]() #10740 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10741 0x99e41224 #10742 0x99e56277英寸-[\uu NSArrayM dealloc]() #10743 0x9104d5ef输入-[NSObject释放]() #10744 0x97f62b22英寸-[\uu n操作内部解除锁定]() #10745 0x9104d5ef输入-[NSObject释放]() #10746 0x97f62ac8 in-[NSOperation dealloc]() #10747 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10748 0x99e41224 #10749 0x99e56277英寸-[\uu NSArrayM dealloc]() #10750 0x9104d5ef输入-[NSObject释放]() #10751 0x97f62b22英寸-[\uu n操作内部解除锁定]() #10752 0x9104d5ef输入-[NSObject释放]() #10753 0x97f62ac8 in-[NSOperation dealloc]() #10754 0x9104d5ef输入-[NSObject释放]() #CFRelease()中的10755 0x99e41224 #10756 0x99e56277英寸-[\uu NSArrayM dealloc]() #10757 0x9104d5ef输入-[NSObject释放]() #10758
libobjc.A.dylib`objc::DenseMapBase<objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >, objc_object*, unsigned long, objc::DenseMapInfo<objc_object*>, true>::find(objc_object* const&):
0x9104d800:  pushl  %ebp
0x9104d801:  movl   %esp, %ebp
0x9104d803:  pushl  %esi
0x9104d804:  subl   $20, %esp
0x9104d807:  leal   -8(%ebp), %eax
0x9104d80a:  movl   %eax, 8(%esp)
0x9104d80e:  movl   16(%ebp), %eax
0x9104d811:  movl   %eax, 4(%esp)
0x9104d815:  movl   12(%ebp), %esi
0x9104d818:  movl   %esi, (%esp)
**0x9104d81b:  calll  0x9104d9b6                ; bool objc::DenseMapBase<objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >, objc_object*, unsigned long, objc::DenseMapInfo<objc_object*>, true>::LookupBucketFor<objc_object*>(objc_object* const&, std::__1::pair<objc_object*, unsigned long> const*&) const**
0x9104d820:  movl   12(%esi), %ecx
0x9104d823:  shll   $3, %ecx
0x9104d826:  addl   (%esi), %ecx
0x9104d828:  movl   8(%ebp), %edx
0x9104d82b:  testb  %al, %al
0x9104d82d:  je     0x9104d836                ; objc::DenseMapBase<objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >, objc_object*, unsigned long, objc::DenseMapInfo<objc_object*>, true>::find(objc_object* const&) + 54
0x9104d82f:  movl   -8(%ebp), %eax
0x9104d832:  movl   %eax, (%edx)
0x9104d834:  jmp    0x9104d838                ; objc::DenseMapBase<objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >, objc_object*, unsigned long, objc::DenseMapInfo<objc_object*>, true>::find(objc_object* const&) + 56
0x9104d836:  movl   %ecx, (%edx)
0x9104d838:  movl   %ecx, 4(%edx)
0x9104d83b:  addl   $20, %esp
0x9104d83e:  popl   %esi
0x9104d83f:  popl   %ebp
0x9104d840:  ret    $4
0x9104d843:  nop    
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSOperationQueue* aQueue = [[ NSOperationQueue alloc ] init ];
    NSMutableArray* array = [ NSMutableArray array ];
    for ( int i = 0; i < 4269; i++)
        [ array addObject: [ [NSOperation alloc ] init  ]];

    for ( int i = 1; i < [ array count ]; i++)
        [[ array objectAtIndex:i ] addDependency:[array objectAtIndex:i-1]];

    [ aQueue addOperations: array waitUntilFinished:NO ];
}
static NSOperationQueue* aQueue = nil;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    aQueue = [[ NSOperationQueue alloc ] init ];
    NSOperation* lastOp = nil;
    for ( int i = 0; i < 5000 ; i++) {
        NSOperation* newOp = [ NSBlockOperation blockOperationWithBlock:^{ ;} ];
        if ( lastOp != nil )
            [ newOp addDependency: lastOp ];

        [ aQueue addOperation:newOp ];

        lastOp = newOp;
    }

}
static NSMutableArray* array;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSOperationQueue* aQueue = [[ NSOperationQueue alloc ] init ];
    aQueue.maxConcurrentOperationCount = 1;
    array = [ NSMutableArray arrayWithCapacity:10000];

    @autoreleasepool {
        for ( int i = 0; i < 10000; i++)
            [ array addObject: [NSBlockOperation blockOperationWithBlock:(void (^)(void))^{
                NSLog(@"executing %d", i);
            }]];
    }
    for ( int i = 1; i < [ array count ]; i++)
        [[ array objectAtIndex:i ] addDependency:[array objectAtIndex:i-1]];

    [ aQueue addOperations: array waitUntilFinished:NO ];
}
#import <Foundation/Foundation.h>

@interface Holder : NSObject

@property (strong) id object;
@property (assign) int i;

- (void) dealloc;
@end

@implementation Holder

- (void) dealloc
{
    [ _object release ];
    [ super dealloc ];
}

@end

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Holder* lastObject = nil;

        for ( int i = 0; i < 1000000; i++) {
            Holder* anObject = [[[ Holder alloc ] init] autorelease ];

            if ( lastObject != nil )
                lastObject.object = anObject;

            lastObject = anObject;
        }
    }

}
@implementation MyOperation 

- (void) main 
{
  ...
  NSArray* dependencies = self.dependencies;
  for (NSOperation* op in dependencies)
    [self removeDependency:op];
}

@end
@implementation SafeOperation

- (void)dealloc {
    __block NSArray<NSOperation *> *dependencies = nil;

    @autoreleasepool {
        dependencies = self.dependencies;
        if ([dependencies count] == 0) {
            return;
        }

        for (NSOperation *op in dependencies) {
            [self removeDependency:op];
        }
    }

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         dependencies = nil;
    });
}

@end