草庐IT

NSAutoReleasePool

全部标签

objective-c - 铿锵警告 : Value stored to 'pool' during its initialization is never read

-(void)main{NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];//WarninggoeshereNSRunLoop*runLoop=[NSRunLoopcurrentRunLoop];while(YES){NSAutoreleasePool*subPool=[[NSAutoreleasePoolalloc]init];[runLooprun];[subPooldrain];}[pooldrain];}我不明白为什么这段代码会收到这样的警告,尤其是当它与Xcode本身生成的main.m中的主函数几乎完全相同的结构时,它

objective-c - 为什么我们需要为每个线程使用 NSAutoreleasepool?

在iOS应用程序开发中,我们使用NSAutoreleasePool在稍后的时间点放弃对象的所有权。但是为什么不同线程之间可以共享呢?当我想使用一个新线程时,为什么我们需要创建一个新的自动释放池?编辑:正如taskinoor提到的,我的问题是为什么要这样设计每个线程都应该有一个单独的自动释放池。 最佳答案 多线程自动释放池的设计挑战是何时释放它们。如果在对象仍在使用时清空池,则会崩溃。对于每个线程,很容易判断您何时处于运行循环之外,因此处于可以耗尽自动释放对象的位置。在多线程情况下,你的线程需要在它们的运行循环结束时同步,这样你就可以

ios - NS自动释放池。什么时候适合创建一个新的自动释放池?

在iOS/CocoaTouch上,我经常看到在方法中创建NSAutoreleasePool新实例的代码。我最近在NSOperation中看到了一个。设置NSAutoreleasePool新实例的基本规则是什么?为什么这比简单地依赖在main.m中创建的预先存在的释放池更可取?谢谢,道格 最佳答案 您可以随时使用新的自动释放池,但这并不总是有益的。每当您启动一个新线程或该线程中自动释放的对象将被泄漏时,它都是必需的。在创建和自动释放大量对象的方法中创建新的自动释放池也很常见。例如,如果您有一个在50次迭代中的每一次迭代中创建10个对象

ios - 使用@autoreleasepool 需要什么 iOS 版本?

当我在iOS4.3.x上使用@autorelease关键字运行代码时,会抛出此错误。dyld:lazysymbolbindingfailed:Symbolnotfound:_objc_autoreleasePoolPushReferencedfrom:/Users/Eonil/Library/ApplicationSupport/iPhoneSimulator/4.3.2/Applications/3782382E-293A-4D5E-86E6-28BE35CF6048/EonilCocoaComplementsTester.app/EonilCocoaComplementsTeste

objective-c - Objective-C 中的自动释放池 - 释放主自动释放池?

据我了解,当向对象发送autorelease消息时,如果除了main.m中的自动释放池之外不存在自动释放池,则该对象将被放置在一个在main.m中。假设这是正确的,我有几个问题:1)是否所有自动释放的对象都保留在该池中直到应用程序终止?2)如果1为真,是否在没有本地自动释放池的情况下创建自动释放对象(因此将该对象放置在main.m池中)将该对象保留在内存中直到应用程序终止或收到内存警告?3)main.m自动释放池什么时候被清空,除了应用程序收到内存警告或应用程序终止时?例如,在这样的cellForRowAtIndexPath委托(delegate)方法中:UITableViewCell

objective-c - 使用@autoreleasepool 减少峰值内存使用

我开发的iPad应用程序具有同步过程,该过程在紧密循环中使用Web服务和核心数据。根据Apple'sRecomendation减少内存占用我定期分配和耗尽NSAutoreleasePool。这目前效果很好,并且当前应用程序没有内存问题。但是,我计划转移到ARC,其中NSAutoreleasePool不再有效,并希望保持同样的性能。我创建了一些示例并为它们计时,我想知道使用ARC实现相同性能并保持代码可读性的最佳方法是什么。出于测试目的,我想出了3个场景,每个场景都使用1到10,000,000之间的数字创建一个字符串。我将每个示例运行3次,以确定他们使用带有AppleLLVM3.0编译器

objective-c - 如何判断对象是否在 NSAutoreleasePool 中

我想知道一个对象被自动释放了多少次。我使用objectivec的时间已经足够长,通常可以直接知道一个对象是否已自动释放,但是我经常看到有关内存和保留计数的问题。在某些时候,答案总是结束,“你不能相信一个对象的retainCount”——我同意这一点,但如果你能确定一个对象被自动释放了多少次,那么你实际上可以相信retainCount如果你添加了一个类别,例如:@interfaceNSObject(NSObject_MemoryDebugging)-(NSUInteger)autoReleaseCount;-(NSUInteger)retainCountWithAutoRelease;@

swift - 从自动释放池返回对象的正确方法

我正在尝试将我们的一些代码包装在autoreleasepool中。但是我偶然发现了一种返回值的方法。我打算将所有内容包装在autoreleasepool中,但我该如何返回值?我有这段代码:funcget(withIdid:String)->Student?{returnautoreleasepool{()->Student?inletrealm=try!Realm()letresults=realm.objects(Student.self).filter("id=%s",id)returnresults.first}}这样返回值合适吗?我在Internet上找到的大多数示例不会从au

ios - 没有 self 的自动释放池访问方法中的 Swift 闭包

这是示例代码funcanyMethod(){//Nothinghere}varmyVariable=""autoreleasepool{anyMethod()//Thisshouldshowerrorprint(myVariable)//Thisshouldshowerror}它应该显示错误Calltomethod'anyMethod'inclosurerequiresexplicit'self.'tomakecapturesemanticsexplicit但是我可以在没有self的情况下调用anyMethod,我想知道为什么这不显示错误为什么没有self也能正常工作?编辑复制粘贴这个

ios - NSAutoreleasePool 和 @autoreleasepool block 有什么区别?

我想知道NSAutoreleasePool和@autoreleasepoolblock之间有什么区别。我已经经历了很多问题,但没有得到任何令人满意的答案。直到现在我才知道在ARC中我们不能使用NSAutoreleasePool和@autoreleasepoolblock可用于ARC启用和禁用情况。因此,在哪些方面它们在内部以这种方式表现不同。即使我们正在使用NSAutoreleasePool或@autoreleasepoolblock,是否有必要在arc禁用环境中释放对象,否则它们会自动执行?此外,如果ARC自动释放内存,那么我们为什么要使用@autoreleasepoolblock。