大佬教程收集整理的这篇文章主要介绍了objective-c – 使用回调时内存泄漏,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例如:
@H_590_10@myClass *myArchive = [[MyClass alloc] init] ; [myArchive callBACk:^(RKObjectLoader* objectLoader,id object ) { NSLog(@"success"); } fail:^(RKObjectLoader* objectLoader,NSError* error) { NSLog(@"Failed"); }]; [myArchive searchArchive:words:paging];
问题是我不知道何时或如何释放实例* myArchive.使用Xcode中的instruments来分析我的代码我总是在这里泄漏.函数searchArchive使用restkit对服务器执行异步请求.我不会在回调中引用该实例,因为我听说这导致了一个保留周期,我已经做了一些关于使用__block和其他c方法来避免保留周期的阅读,这一切都很好但是现在它没有实际的代码发生在回调如何释放* myArchive实例.任何人都能解释我应该如何在Objective-c中处理这个问题?
编辑:
这是我在myclass中设置回调的地方
// Sets internal BACks on this object which basically wrap the delegate // - (void)callBACk: (void (^)(RKObjectLoader* objectLoader,id object))success fail: (void (^)(RKObjectLoader* objectLoader,NSError* error))fail { //sanity check NSAssert(_currentDelegate != self,@"Delegate is another object. Can not set callBACk"); // store our callBACk blocks in the instance _success = [success copy] ; _fail = [fail copy] ; }
然后在dealloc中释放_success和_fail
并在@interface中
@interface myClass : NSObject<RKObjectLoaderDelegate> { // holds the block callBACk for "success" void (^_success)(RKObjectLoader* objectLoader,id object); // holds the block callBACk for "fail" void (^_fail)(RKObjectLoader* objectLoader,NSError* error); }
我希望这能让我更深入地了解我做错了什么.
编辑2:
好的,我现在开始看到错误:
-(void)retrieveGallery{ //create call BACk for async and deal with the result [_galleryItems callBACk:^(RKObjectLoader* objectLoader,NSArray *objects) { //success happy days. do a bunch of code here that does not cause leaks } fail:^(RKObjectLoader* objectLoader,NSError* error) { //retry the attempt to retrieve gallery data from the server _retryCount++; if (_retryCount < _maxRetryCount) { [self retrieveGallery]; } }]; //read the collection of gallery items from server [_galleryItems readGallery]; }
唯一的实际内存泄漏是当回调因任何原因捕获失败,然后从回调内调用[self retrieveGallery]函数再次尝试时.这是造成泄漏的原因所以我猜这是一个很大的不,不.我该如何再次尝试该功能(在这种情况下为retrieveGallery).
以上是大佬教程为你收集整理的objective-c – 使用回调时内存泄漏全部内容,希望文章能够帮你解决objective-c – 使用回调时内存泄漏所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。