Tag: 自动ref counting

ARC和Storyboard的兼容性

考虑到设备和iOS,ARC和Storyboard的兼容性是什么? ARC和Storyboard能在iPhone 3G,3GS,4和4S上运行吗? ARC和Storyboard是否可以在iOS 4和5上运行?

宣布委托伊娃时发生ARC错误

我正在使用ARC(不,这不是NDA)。 我正在与我的界面宣布我的伊娃 id itemDelegate; 然后我宣布的财产: @property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate; (由于ARC,而不是分配) 在我的实现文件中,我简单地综合它: @synthesize itemDelegate; 但是,我收到错误: "Existing ivar 'ItemDelegate' for _weak property 'itemDelegate' must be _weak". 任何人都知道什么是错的? 谢谢你的帮助。 ARC – 自动引用计数

iOS 5阻止ARC桥接

这个问题引用这个问题: 如何简化callback逻辑与块? 我的标题有这些typedefs typedef void (^StuffDoneBlock)(NSDictionary * parsedData); typedef void (^StuffFailedBlock)(NSError * error); 并在初始化 stuffDoneCallback = Block_copy(done); StuffFailedCallback = Block_copy(error); 在这篇文章中说Block_copy是不必要的。 但是,那么它需要一个桥梁铸造。 编译器的消息如下: error: cast of block pointer type 'StuffDoneBlock' (aka 'void (^)(NSDictionary *__strong)') to C pointer type 'const void *' requires a bridged cast [4] stuffDoneCallback = _bridge(Block_copy(done)); ^~~~~~~~~~~~~~~~ /Developer-4.2/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/Block.h:60:61: note: instantiated from: #define […]

如何激活ARC下文书中的循环报告?

仪器可以通过graphics化的方式在ARC下显示保留周期。 我还记得前几天我偶然发现了仪器上的“Cycles”观点。 现在我开始使用ARC,突然间我再也找不到了。 分配和虚拟机跟踪器仪器不提供它和泄漏仪器。 我必须做什么才能看到保留周期? find一个截图作为证据:

UIWebView占用大量内存

在我的应用程序,当我加载任何网站URL的UIWebView的内存从30MB跳跃到大约140MB。 我正在使用ARC 当解除UIWebViewController [包含UIWebView的Viewcontroller ]时,它不释放内存。 任何机构可以帮助我如何解决这个内存问题,也请给我提供一些ARC内存最佳实践的指针 加载网页: – NSURL *nsurl=[NSURL URLWithString:self.url]; NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl]; [webview loadRequest:nsrequest]; closures视图控制器: – [self dismissViewControllerAnimated:YES completion:^{ webview.delegate=nil; webview=nil; }]; 提前致谢 :)

为什么我的对象的弱委托属性在我的unit testing中为零?

我为这个unit testing有一个非常简单的设置。 我有一个具有委托属性的类: @interface MyClass : NSObject … @property (nonatomic, weak) id<MyDelegateProtocol> connectionDelegate; … @end 我在testing中设置了委托: – (void)testMyMethod_WithDelegate { id delegate = mockDelegateHelper(); // uses OCMock to create a mock object [[delegate expect] someMethod]; myClassIvar.connectionDelegate = delegate; [myClass someOtherMethod]; STAssertNoThrow([delegate verify], @"should have called someMethod on delegate."); } 但是这个委托实际上并没有设置在我的unit testing的第3行,所以#someMethod永远不会被调用。 当我改变它 myClassIvar.connectionDelegate = delegate; STAssertNotNil(myClassIvar.connectionDelegate, […]

在SDWebImage代码中解释__weak和__strong的使用原因

我认为我很了解强和弱的关键字,但我不明白它是如何在下面的代码中使用的。 这个代码是由github上的Olivier Poitrey提供的SDWebImage。 我了解强和弱的关键字,如下所述: iOS5强和弱存储的解释 下面的代码以对我感兴趣的方式使用__weak和__strong关键字。 这是不是一个孩子父母关系或委托模式,因为我习惯于看到弱用。 但是,我确定这是一个经常使用的模式,正如我之前在其他代码中看到的那样。 它在另一个线程上运行的块之前设置__weak引用。 然后,在该块内,它将弱参考设置为强参考。 我敢肯定,这是优雅的代码,所以我试图理解它。 如果在块运行之前“自我”不再存在,则弱自引用将被清零。 块运行时,强参考也将被设置为零。 因此,由于自己不再存在,所以会知道杀死其余的操作。 我有这个对吗? 现在,如果我们不使用__weak和__strong关键字会发生什么? 如果我们只是检查块内部是否self == nil。 自从块复制整棵树以后,“自我”会不会成为零? 有人可以帮助神秘的这段代码很神秘吗? 有人可以证实或否定我的假设吗? – (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock; { [self cancelCurrentImageLoad]; self.image = placeholder; if (url) { __weak UIImageView *wself = self; id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, […]

编译时出现ARC错误

我试图编译使用LLVM GCC 4.0编译器,并在我的.m文件的多个我得到这个错误:ARC禁止'发布'的显式消息发送我已经尝试使用-fno-objc-arc作为编译器标志但是会返回错误:无法识别的命令行选项“-fno-objc-arc”。 我该如何解决这个问题?

用ARC为什么使用@properties了?

在非ARC代码保留属性中,使用self.property =语句轻松地为您pipe理内存pipe理,所以我们被教导将其用于几乎所有的事情。 但是现在使用ARC这个内存pipe理已经不再是一个问题了,那么使用属性的原因是什么呢? 还有什么好的理由(显然除了提供公共访问实例variables)使用属性了吗?

ARC和autorelease

autorelease用于返回的函数对象,所以调用者不拥有所有权,被调用者将在未来释放对象。 然而,ARC可以计算调用者的所有权并在使用后释放它,也就是说,它可以像C ++中的智能指针一样行为。 使用ARC,它可以摆脱autorelease,因为autorelease是非确定性的。 我问这个问题的原因是,我看到ARC中的返回对象调用dealloc比非ARC代码。 这导致我认为,ARC可以像智能指针一样的行为,可以使autorelease无用。 这是真的还是可能的? 我可以考虑autorelease有用的唯一的事情是multithreading或networking代码,因为当对象传递时可能不容易计算所有权。 谢谢你的想法。 这里是新的编辑,使事情清楚: 与autorelease + (MyClass*) myClass { return [[[MyCClass alloc] init] autorelease]; } – doSomething { MyClass *obj = [MyClass myClass]; } 用ARC: + (MyClass*) myClass { return [[MyCClass alloc] init]; // no autorelease } – doSomething { MyClass *obj = [MyClass myClass]; // insert [obj release] […]