草庐IT

ARC下AutoReleasePool的误区

全部标签

ios - ARC 下指向 Objective-C 对象的 C 风格指针数组

我有一个指向Objective-C实例的二维指针数组,用于跟踪map网格上的游戏对象。现在我正在将我的代码转换为ARC,Xcode指出了错误。我知道不允许将指向对象的指针作为结构成员,但这个让我(几乎)措手不及。我理解ARC约束背后的基本原理,但是:在网格中查找对象时,我负担不起Objective-C数组的开销,并且对象本身已经被一个NSArrayivar所拥有,该ivar定义在同一个类中,该类具有C风格的网格作为ivar;c风格的数组只是一种结构方便的快捷方式。此外,当对象从拥有的NSArray中移除时,我将相应的网格槽设置为NULL。也就是说,二维数组(网格)只是一组快速(但愚蠢)

ios - 如何在 ARC 下的 Instruments 中激活 Cycles 报告?

仪器可以以有趣的图形方式可视化ARC下的保留周期。我还记得几天前我无意中发现了Instruments中的“Cycles”View。现在我开始使用ARC的地方,突然间我再也找不到它了。Allocations和VMTracker工具不提供它,Leaks工具也不提供。我必须做什么才能看到保留周期?找到截图为证: 最佳答案 使用Xcode4.2.1,我在“Cycles&Roots”下的“Leaks”中找到了它。但是,我发现它在使用ARC时用处不大。它确实检测到CF泄漏,显然我正在泄漏一个递归block,对此我无能为力,但我不得不根除Leak

objective-c - dealloc 调用后台 GCD 队列崩溃用 ARC 构建的应用程序

我有一个ViewController,它在后台GCD队列中下载Assets。我将下载函数传递给一个回调block,以便在下载完成后执行,并且它始终在主线程上执行该block。如果我的ViewController在下载完成之前被用户关闭,就会出现问题。我怀疑发生的事情是,一旦我的ViewController被关闭,回调block是唯一保留对Controller的强引用的东西。回调block只保留在后台线程中,所以一旦它被释放,回调block范围内捕获的所有对象也会被释放,尽管是在后台队列中。这就是问题所在:在后台队列中释放会导致dealloc在同一队列中运行,而不是在主队列中运行。这反过

ios - ARC 和 UIAlertView : unrecognized selector sent to instance

这是我如何显示UIAlertView和委托(delegate)clickedButtonAtIndex-UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"title"message:@"message"delegate:selfcancelButtonTitle:@"Cancel"otherButtonTitles:@"Continue",nil];[alertshow];-(void)alertView:(UIAlertView*)alertViewclickedButtonAtIndex:(NSInteger)buttonIn

iOS:如何销毁 ARC 中的单例?我是不是该?

我有一个单例类,它会累积数据,直到将数据写入我的数据库(如果您想知道我为什么要这样实现,请参阅here)。保存数据后,我想销毁单例。我怎样才能在ARC中做到这一点?还是我太偏执了,我需要彻底摧毁它吗?*您可能会说这是this的副本问题,但此处接受的答案不够具体,无法提供帮助。它说“您可以声明一个您显式调用的方法/函数。”这方面的代码可能是什么样的?如果我不能在方法外释放对象,我怎么可能在方法内将它拉下来?它还说“最简单的方法是让静态C++类持有它,然后在其析构函数中释放它。”我不懂C++,但是-你真的可以在你的应用程序代码中放入C++类吗?我的单例是这样实现的:+(NHCFamilyS

ios - 针对 Game Center 身份验证的 Xcode 4.6 ARC 警告

这是一个新编译器警告,只有在我将XCode更新到4.6时才会出现。我的代码是直接从Apple的文档中提取的(顺便说一句,这是我的iOS6代码)。GKLocalPlayer*localPlayer=[GKLocalPlayerlocalPlayer];localPlayer.authenticateHandler=^(UIViewController*viewController,NSError*error){[selfsetLastError:error];if(localPlayer.authenticated){警告——在此block中强烈捕获“localPlayer”可能会导致保

iphone - ARC 循环保留检测

我将一些旧代码移植到了Objective-CARC(自动引用计数)中,它似乎运行良好。除了一个相当大的高级对象在从我的导航堆栈中弹出时没有被释放,这让我相信我在某个地方有一个保留周期,ARC对我隐藏了(或者至少很难追踪)。什么是消除这种潜在的保留循环的最佳方法和/或什么是确定ARC下内存泄漏原因的好方法?谢谢! 最佳答案 我刚刚将一个较旧的应用转换为使用ARC。仪器显示没有泄漏,但分配继续增加。我发现通过查看事件对象以查找我知道应该删除的内容,我能够在没有发布的情况下追踪保留内容。以下是基本步骤:使用Instruments中的分配工

iOS 7.0 和 ARC : UITableView never deallocated after rows animation

我有一个非常简单的ARC测试应用程序。其中一个ViewController包含UITableView。在制作行动画(insertRowsAtIndexPaths或deleteRowsAtIndexPaths)之后,UITableView(和所有单元格)从未被释放。如果我使用reloadData,它工作正常。在iOS6上没有问题,只有iOS7.0。关于如何修复此内存泄漏的任何想法?-(void)expand{expanded=!expanded;NSArray*paths=[NSArrayarrayWithObjects:[NSIndexPathindexPathForRow:0inSe

ios - 即使使用 kCGLineCapRound 也无法在 UIBezierPath Arc 中圆顶

我无法在使用UIBezierPath创建的Arc上显示圆角。无论我是否设置kCGLineCapRound,它仍然是完美的平方。本主题应与thisone相同,但是解决方案不起作用。这是我在viewWillAppear中的示例代码(仅用于测试目的):intradius=100;CAShapeLayer*arc=[CAShapeLayerlayer];UIBezierPath*path=[UIBezierPathbezierPathWithArcCenter:CGPointMake(100,50)radius:radiusstartAngle:M_PIendAngle:M_PI/150clo

ios - 如何为特定文件关闭 ARC

我知道我应该将编译器标志-fno-objc-arc添加到XCode4的编译源中以完成此操作。但它不起作用。即使添加了标志,我的KeychainItemWrapper.m文件仍然出现错误,声称我需要使用__bridge作为C指针。我的项目是ARC安全的,但Apple提供的与钥匙串(keychain)交互的引用不是。我只想为该单个文件禁用ARC。我还缺少什么? 最佳答案 我在4.2的不同项目中不止一次遇到过这种情况,但后来我无法足够可靠地重现它以生成错误报告。但我可以说,在我的案例中,一个干净的构建清除了它。