ARC下AutoReleasePool的误区
全部标签 我是iOS5和ARC的新手,所以请原谅我的愚蠢问题。如果我们在我们的项目中使用ARC,是否意味着根本不会有任何内存泄漏。如果使用ARC,是否需要使用Instruments检测内存泄漏和NSZombies? 最佳答案 ARC将帮助您消除某些类型的泄漏,因为您不会忘记release或autorelease单个对象。例如,这种类型的错误变得不可能:myLabel.text=[[NSStringalloc]initWithFormat:@"%d",17];//oops,justleakedthatNSString!但是,ARC不会消除由保留
特别是,这种代码是否总是按预期工作(其中MyResourceGuard是一个在其init方法中锁定独占资源并在其dealloc方法中释放锁的对象):NSLog(@"Abouttocapturesomeexclusiveresource.");{MyResourceGuard*guard=[MyResourceGuardnew];//Dosomethingwiththeexclusiveresourcehere.}//guardisoutofscope,thereforeitsdeallocshouldhave//beencalledrightawayandtheresourceshou
为什么将CGImageRef转换为对象指针不需要内存管理信息(__bridge等)?例如,如果image是UIImage*类型,而layer是UIView的底层,那么下面这行代码不会引起编译器的任何提示:layer.content=(id)[imageCGImage]; 最佳答案 引用TransitioningtoARCReleaseNotes:TheCompilerHandlesCFObjectsReturnedFromCocoaMethodsThecompilerunderstandsObjective-Cmethodsthat
我有一些block内的操作。这个操作,只更新一个UIImage像这样:^(UIImage*image){self.myImage=image;}];我的图像是通过使用NSURLConnection访问互联网计算的。当我从Internet收到图像时,我调用NSMutableArray中的那个block。到目前为止,一切都很好。我的问题是,当我有多个具有相同URL的图像时,我没有进行多次调用,而是向处理连接的类内的NSMutableArray添加了一个新block。这样一来,我就可以进行一次调用,并更新共享URL的多张图像。一切正常,问题是我在漏block。我将这样的block添加到NSM
我还没有使用过ARC,只是在它通过第3方代码强制进入项目时处理它。我已经阅读了所有ARC文档,但还没有看到这个问题的答案:如果我在使用-fobjc-arc编译的模块中定义了一个类,我能否在不支持ARC的模块中从中派生一个新类?在我看来,只要派生类不尝试触及根类中的任何ivar,它就应该可以正常工作。在我看来,即使有一个调用[superdealloc]的dealloc方法在派生类中也没有问题。反过来呢?我可以从非ARC类派生出支持ARC的类吗?应该也能正常工作吧?加分项:在混合ARC和非ARC代码时是否有我应该让自己意识到的问题? 最佳答案
假设我有这样一个强大的属性:@interfaceFoo@property(strong,nonatomic)NSArray*myArray;@end并且,在我的初始化程序中,我这样设置myArray:myArray=[NSArrayarray];这样安全吗?ARC会为我妥善保留myArray吗?我问的原因是我有一个项目,其中myArray没有在这种情况下正确保留,并且我在路上遇到了糟糕的内存访问。但是,如果我使用myArray=[[NSArrayalloc]init];那么一切都很好 最佳答案 是的,ARC会自动为您保留它。对ARC
我遇到过几次这个问题,想知道应该采取的正确方法。举个例子,假设我正在编写一个iPhone应用程序,我想要一个使用block的自定义警报View类。所以我写了这个类,然后在我的代码中:MyAlertView*alert=[MyAlertViewalertWithBlahBlahBlah...];[alertaddButton:@"button"withBlock:^{...}];[alertshow];在警报View类的某处,我们有-(void)addButton:(NSString*)buttonwithBlock:(void(^))block{[_blockssetObject:[b
我已经将一个项目重构为ARC。看起来不错,但是有一个对象使用了通知中心。我在自定义dealloc方法中删除了观察者。这在非ARC项目中运行良好。它也适用于ARC,但我收到一个疯狂的警告:“方法可能缺少[superdealloc]调用。”在ARC项目中,当方法结束时,它会自动为我完成。更好的是:我不能在ARC项目中调用它!这一定是XCode的错误,对吧?这是我的代码:-(void)dealloc{[[NSNotificationCenterdefaultCenter]removeObserver:self];//[superdealloc];willbecalledautomatical
我在ARC下使用[UIBezierPathCGPath]和CAShapeLayer时遇到BADACCESS错误。我尝试过以各种方式桥接,但我不清楚这是否是问题所在。我已将崩溃隔离到使用makeToPath方法的结果:maskLayer=[CAShapeLayerlayer];maskLayer.path=[selfmakeToPath];但这不会崩溃:maskLayer=[CAShapeLayerlayer];maskLayer.path=[selfmakeFromPath];makeToPath创建的路径是否存在无效?一旦我解决了这个崩溃问题,我计划将from和to路径与CABasi
我希望标题不会太误导...:)我播放系统声音并像这样向其添加SoundCompletion-Callback:AudioServicesAddSystemSoundCompletion(soundID,NULL,NULL,completionCallback,(__bridge_retainedvoid*)self);而«self»是一个简单的NSObject在完成回调中,我尝试再次调用播放例程:我必须将__bridge_transfer和__bridge_retained添加到转换中,否则会出现错误、崩溃或其他意外行为。但尽管如此,整个事情还是行不通。我将要播放的声音存储在NSMut