Tag: 自动重新计数

为什么在debugging模式和运行模式下保留计数是不同的?

我知道ARC和MRC是如何工作的。 但在testing下面的代码时我感到困惑。 我不知道这是为什么发生。 为什么在debugging模式和运行模式下,同一个问题的保留计数是不同的? NSMutableArray *a = [NSMutableArray array]; [a addObject:@"abc"]; NSLog(@" 1 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a)); __weak NSMutableArray *b = a; NSLog(@" 2 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a)); a = nil; NSLog(@" 3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b)); [b addObject:@"xys"]; NSLog(@" 4 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b)); 当我在运行模式下运行应用程序时,应用程序在NSLog(@" 3 […]

那么ARC和在viewDidUnload上发布属性/子视图有什么关系?

我仍然在学习iOS开发,并且一直在处理各种教程和书籍。 一些预ARC,一些ARC。 在某些情况下,我们被教会在viewDidUnload上释放一个ViewController的所有属性和子视图,但在某些情况下,我被告知这不再是必需的。 有人可以给出明确的答案吗? 在iOS 5+中,是否需要完成整个操作? -(void)viewDidUnload { [super viewDidUnload]; self.photoViewCell = nil; self.photoImageView = nil; self.firstNameTextField = nil; self.lastNameTextField = nil; } … 或不? 如果是这样,这只是为UIView的后代的属性,或者是为ViewController的所有属性? 谢谢

ObjC ARC收缩(铿锵崩溃)

我总是犹豫在这里的杀手论坛上添加一个全新的问题,但是我没有看到任何接近这个bug的东西。 似乎铿锵在编译我的一个.m文件时崩溃了。 如果有人已经看到或知道下面的任何解决scheme,我会非常感激。 当我在使用XCode 4.4.1的版本configuration中构buildarmv6时会发生此错误 但是,当我在debuggingconfiguration中构buildarmv6时,或者为armv7,armv7s或i386发布时,不会发生这种情况 。 具体的错误是“ObjC ARC收缩”: 1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module '/Users/Me/Documents/ThisProject/iOS/…./ClassFoo.m'. 4. Running pass 'ObjC ARC contraction' on function '@"\01-[ClassFoo evalJS:]"' clang: error: unable to execute command: Segmentation fault: 11 clang: error: clang frontend command failed due to […]

在UINavigationController上推送许多视图控制器时的内存问题

我正在为iPad制作一本交互式书籍,并使用UINavigationController来实现页面与下一页之间的导航。 当用户翻页时,下一页被推到导航堆栈顶部。 我现在有15页进入应用程序,当我尝试从第14页到第15页时,应用程序崩溃。控制台中没有错误消息,设备的崩溃日志中也没有任何logging。 故事板中的每个视图控制器的场景都有UIImageViews显示的图像在5MB到20MB之间。 视图控制器的viewDidLoad方法只被调用一次。 所有应用程序的资产总大小低于200B。 我正在使用ARC。 我使用仪器的内存监视器运行应用程序。 每当新页面打开时,应用程序的真实内存消耗增加约80MB,当达到800MB(设备是iPad 3)时,应用程序崩溃。 为什么如此巨大的内存消耗? 这是因为故事板的场景中的UIImageViewcaching图像? 当使用UINavigationController和ARC时,什么是释放内存的最佳方式? 我尝试添加设置视图控制器的viewDidDisappear:方法的所有视图控制器的子视图为零,但内存消耗保持不变。

为theos构build系统启用ARC

我正在使用theos构build系统为越狱iPhone编写应用程序和调整。 有没有办法让我为自己的特定项目启用自动引用计数? 我谷歌search,并试图破译他们的makefiles,但我一直没能find任何东西。

ARC,值得吗?

当我从C ++(和小Java)移到Objective C(iOS)时,我很难理解iOS中的内存pipe理。 但现在所有这一切似乎很自然,我知道保留,autorelease,复制和发布的东西。 在阅读了ARC之后,我想知道使用ARC还有更多好处,或者您不必担心内存pipe理。 在转向ARC之前,我想知道如何转向ARC。 XCode具有“转换为Objective C ARC”菜单。 转换是如此简单(没有什么可担心的)? 它有助于我减less我的应用程序内存足迹,内存泄漏等(不知何故?) 它是否对我的应用程序有很多testing影响? 什么是非明显的优势? 任何移动到它的缺点?

当我试图快速访问它时,弱财产给了我零

我有这些类: class Song { var title : String = "" weak var album : Album? init() { self.album = Album() } } 和 class Album { var title : String = "" var Songs : Array < Song > = [] deinit { print(self , self.title) } } 这应该可以正常工作,但每当我尝试从歌曲实例设置标题为专辑例如如果执行代码如下我得到零错误: let s = Song() s.title = […]

无法在钥匙串中存储电子邮件(KeychainItemWrapper)

我正在使用github上提供的KeychainItemWrapper的ARCified版本,我无法获得它存储电子邮件和密码。 KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"myApp" accessGroup:@"MY_APP.com.yourcompany.GenericKeychainSuite"]; [keychainItem setObject:[self.email dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount]; [keychainItem setObject:self.password forKey:(__bridge id)kSecValueData]; 只要我存储一封电子邮件,我就完美地工作了…没有符号(@)。 否则,我得到的错误 *** Assertion failure in -[KeychainItemWrapper writeToKeychain] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.' 哪些来自这些线路 result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL); NSAssert( result == noErr, @"Couldn't add the Keychain Item." […]

引用嵌套块中的弱自我

假设我已经创build了一个弱自我使用 __weak typeof(self) weakSelf = self; [self doABlockOperation:^{ … }]; 在那个块里面,如果我嵌套另一个块: [weakSelf doAnotherBlockOperation:^{ [weakSelf doSomething]; } 它会创build一个保留周期吗? 我是否需要为弱者创造另一个弱点? __weak typeof(self) weakerSelf = weakSelf; [weakSelf doAnotherBlockOperation:^{ [weakerSelf doSomething]; }

与ARC的iOS应用程序,find谁是一个对象的所有者

我正在编写一个使用ARC的应用程序,目前似乎有一些内存泄漏。 谷歌search我发现了一些关于如何使用检查员的提示。 在那里,我可以看到一些类的实例分配的堆,我也可以看到一些调用堆栈如何分配对象,以及如何更改保留计数。 但似乎我看不到完整的调用堆栈,所以我不知道谁最终拥有这个对象。 在我看来,这个拥有者不知何故不释放该对象(或拥有该可疑对象的对象)。 任何人都可以给我一个提示find分配的对象的所有者吗? 还请注意,这些对象没有被标记为“泄漏”,而是被分配。 对我来说,好像对象被泄漏,因为分配了新的对象。 任何进一步的帮助,如何最好的继续和发现可疑的泄漏表示赞赏。