Tag: 自动ref counting

在arc下使用objc_getClassList

有没有人设法使用下弧的objc_getClassList,closures文件的弧closures? 根本的问题是其中一个参数是C类指针的数组。

将非ARC转换为ARC项目而不重新创build它?

我只是想知道是否有可能将非ARC项目转换为ARC而不重新创build它? 谢谢

IBOutlet是否暗示__weak?

刚刚开始与ARC。 在ARC之前,我只是简单地声明我的sockets,例如: IBOutlet UIButton *button; 所以我不保留它或任何东西。 用ARC,不指定弱或强意味着强。 所以,如果我在ARC(即IBOutlet UIButton *button; )下做同样的事情,这是否意味着button是一个强有力的参考? 或者我必须将其明确定义为弱? 总之,IBOutlet意味着__weak?

UIPageViewController在内存不足时翻转速度过快时会崩溃

我有一些内存问题,由于Xcode的UIPageViewController的模板caching所有的页面数据,所以我改变它来dynamic加载页面,所以现在当我的应用程序收到一个低内存警告,它释放页面的内存不显示,但如果用户正在通过点击屏幕边缘来真正快速地浏览页面,它仍然崩溃。 我猜这是因为当didReceiveMemoryWarning被调用时,它不能足够快地释放内存。 如果用户慢慢翻转,它可以正常工作。 我限制了用户翻转页面的速度,但仍然发生。 我希望能够在每次翻页时释放内存,而不必等待低内存警告。 我正在使用ARC。 有没有办法做到这一点? 还有什么我可以做,以防止这一点? 谢谢。 编辑: (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = [self indexOfViewController:(SinglePageViewControllerSuperclass *)viewController]; if ((index == 0) || (index == NSNotFound)) { return nil; } index–; return [self viewControllerAtIndex:index]; } (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSUInteger index = [self indexOfViewController:(SinglePageViewControllerSuperclass *)viewController]; if (index == NSNotFound […]

使用@autoreleasepool降低峰值内存使用量

我在一个iPad应用程序上工作,这个应用程序有一个同步过程,在紧密的循环中使用Web服务和核心数据。 为了减less内存占用根据苹果的build议我分配和排出一个NSAutoreleasePool定期。 这目前工作很好,并没有目前的应用程序的内存问题。 但是,我打算转移到ARC, NSAutoreleasePool不再有效,并希望保持这种相同的性能。 我创build了一些例子并对它们进行了定时, 我想知道使用ARC来实现同样的性能并保持代码可读性的最佳方法是什么 。 出于testing目的,我想出了3个场景,每个使用1到10,000,000之间的数字创build一个string。 我运行了每个示例3次,以确定他们使用苹果LLVM 3.0编译器(w / o gdb -O0)和XCode 4.2使用Mac 64位应用程序花了多长时间。 我也通过仪器运行每个例子来大致了解记忆峰值。 以下每个示例都包含在以下代码块中: int main (int argc, const char * argv[]) { @autoreleasepool { NSDate *now = [NSDate date]; //Code Example … NSTimeInterval interval = [now timeIntervalSinceNow]; printf("Duration: %f\n", interval); } } NSAutoreleasePool批量[原始预ARC](峰值内存:〜116 KB) static const NSUInteger BATCH_SIZE = […]

内存警告和崩溃(ARC) – 如何确定它发生的原因?

我最近开始使用ARC,从那以后我就把它归咎于每一个内存问题。 :)也许,你可以帮助我更好地理解我做错了什么。 我目前的项目是关于CoreGraphics很多 – 图表绘图,充满缩略图的视图等等。 我相信在使用手动内存pipe理时,除了几个僵尸之外,没有任何问题。但是到目前为止,应用程序每次尝试创build大量缩略图或重绘一些更复杂的图表时都会崩溃。 在使用仪器进行分析时,我可以看到驻留记忆以及肮脏记忆的非常高的价值。 堆分析显示相当惊人的不规则增长… 在绘制一些缩略图时,驻留内存会增长大约200 MB。 当绘制所有内容时,内存的回落几乎与绘制前相同。 但是,有了许多缩略图,常驻内存中的值高于400 MB ,显然会使应用程序崩溃。 我试图限制在同一时间绘制缩略图(NSOperationQueue和它的maxConcurrentOperationCount),但释放这么多的内存似乎需要多一点时间,它并没有真正解决这个问题。 现在,我的应用程序基本上不工作,因为真正的数据与许多复杂的图表=很多缩略图。 每个缩略图都是用我从这里得到的代码创build的:( UIImage上的类别) + (void)beginImageContextWithSize:(CGSize)size { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { if ([[UIScreen mainScreen] scale] == 2.0) { UIGraphicsBeginImageContextWithOptions(size, YES, 2.0); } else { UIGraphicsBeginImageContext(size); } } else { UIGraphicsBeginImageContext(size); } } + (void)endImageContext { UIGraphicsEndImageContext(); } + (UIImage*)imageFromView:(UIView*)view { […]

如何正确实现ARC兼容和`alloc init`安全的Singleton类?

我看到线程安全的版本 +(MyClass *)singleton { static dispatch_once_t pred; static MyClass *shared = nil; dispatch_once(&pred, ^{ shared = [[MyClass alloc] init]; }); return shared; } 但是如果有人只是调用[MyClass alloc] init]会发生什么? 如何使其返回与+(MyClass *)singleton方法相同的实例?

ARC和CFRelease?

我有点困惑。 在我读过的地方,build议在使用ARC时,仍然需要释放核心基础对象,ARC不pipe理它们。 不过,我有一个方法,使用CF的方法/对象,我用CFRelease上,但是,然后导致应用程序崩溃。 取消注释我的CFRelease修复了这个问题,但是我假设我有内存泄漏? 有人可以解释哪些东西需要释放,哪些没有,或者这个代码有什么不对吗? + (NSString *) fileExtensionForMimeType:(NSString *)type { CFStringRef mimeType = (__bridge CFStringRef)type; CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL); CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension); NSString *ext = (__bridge NSString *)extension; // CFRelease(mimeType); // CFRelease(uti); // CFRelease(extension); return ext; } 三位CFRelease电话都提到了这个问题,但是我知道这是错误的。 我该怎么做?

ARC,通过被捕获的自我在块和参考周期中的ivars

我正在纯iOS5 / ARC环境中工作,所以我可以根据需要使用__weak引用。 在许多情况下,我都会在一个块中引用ivars,其中最引人注目的就是animation块,它们可以移动视图,这是我的视图控制器类的属性。 我的问题: 在一个块中最简单的使用ivars,我创build一个参考周期? 每次我写一个块来处理包含对象的实例variables时,是否需要使用__weak self / strong self技巧? 我一直在重新审视2011年WWDC会议#322(Objective-C的深度进展),以了解关于“通过被捕获的自我的参考周期”在时间索引25:03开始的3分钟片段的细微差别。 对我而言,这意味着任何一个块中的ivars的使用都应该被该段中描述的弱自我/强自我设置所保护。 在视图控制器上的下面的示例方法,是我做的animation的典型。 在openIris块中,像我一样引用ivars“_topView”和“_bottomView”是错误的吗? 我应该总是在块之前设置一个__weak引用,然后在块内部强引用刚刚设置的弱引用,然后通过块内的强引用访问ivars? 从WWDC会话中,我明白,在一个块中引用ivars实际上是创build了一个引用这些ivars隐含的隐含的自我。 对我来说,这意味着在没有弱/强舞的情况下访问ivars是正确的,确实没有任何简单或微不足道的情况来确保没有循环。 还是我读到了一个不适用于简单情况的angular落案例,比如我的例子? – (void)openIrisAnimated:(BOOL)animated { if (_isIrisOpened) { NSLog(@"Asked to open an already open iris."); return; // Bail } // Put the common work into a block. // Note: “_topView” and “_bottomView” are the backing ivars of // […]

UIViewController不保留其编程创build的UISearchDisplayController

在关于searchDisplayController属性1的UIViewController 文档中 ,它说: 如果以编程方式创buildsearch显示控制器,则该属性在初始化时由search显示控制器自动设置。 而当我创build我的UISearchDisplayController如此: [[[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self] autorelease]; -[UIViewController searchDisplayController]不是nil 。 但是,在事件循环结束之后,会导致search显示控制器在search栏内不显示。 没有崩溃。 这很奇怪。 如果我省略了autorelease的调用,一切正常: [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 但是,泄漏UISearchDisplayController (我用仪器validation了这一点)。 由于searchDisplayController 属性被标记为(nonatomic, retain, readonly)我期望它会保留设置后的UISearchDisplayController 。 这个计算器文章是相关的。