草庐IT

everything-know-about-arc

全部标签

ios - 在 ARC 中,重新初始化的对象的内存会发生什么变化?

假设我有一个名为test的方法。test{NSString*answer=[[NSStringalloc]initWithString:@"VALUE1"];answer=[[NSStringalloc]initWithString:@"VALUE2"];}当answer被重新初始化时,在ARC下第一次初始化的内存会发生什么? 最佳答案 释放第一个字符串(在[[NSStringalloc]initWithString:@"VALUE1"];中创建的字符串)answer在这种情况下是一个具有strong所有权资格的对象。所以从docs

ios - [UIView setNeedsDisplay] : is there an easy way to know when drawRect is complete?

我有一个UIView,我导入它以使用父类(superclass)中的setNeedsDisplay显示贝塞尔曲线路径。一旦UIView完成更新,我需要在父类(superclass)中调用另一个方法。我在setNeedsDisplay之后调用了该方法,但是该方法是在UIView完成重绘之前调用的。作为快速修复,我在调用方法之前用0.3秒创建了一个NSTimer。那行得通,但可能不可靠。我也可以将UIView的通知发回父类(superclass),但这似乎不对。我已经检查了文档,但找不到有关完成通知的任何信息。是否有任何内置函数? 最佳答案

ios - NSCoder : how does the class know which object we pass?

已经有一个关于decoding的类似问题,但我想尝试总结一下,看看我是否得到了正确的全貌。基本上Apple提供了NSCoder类,如果它是NSCoding类的子类,则允许对对象进行编码和解码。从该类继承允许使用Apple提供的NSCoder编码和解码函数,允许“序列化”NSDataType(以及所有原始C结构和数据类型)。我对NSCoder的理解classreference是encodeObject函数能够检测我们传递的对象类型,从而以正确的方式对其进行序列化。Instaed,当使用特定类型的int(例如int64)时,Apple决定提供一个特定的函数,因为理解数据的“签名”并不是那么

ios - ARC 委托(delegate)内存管理

在Apple的文档中说Youmayimplementadeallocmethodifyouneedtomanageresourcesotherthanreleasinginstancevariables.Youdonothaveto(indeedyoucannot)releaseinstancevariables,butyoumayneedtoinvoke[systemClassInstancesetDelegate:nil]onsystemclassesandothercodethatisn’tcompiledusingARC.这是否包括UIKit和框架委托(delegate),例如

ios - 为什么 UINavigationController 无法使用 ARC 获取 block 回调参数的所有权

给定以下代码示例(iOS7、Xcode5):/***SampleProviderClass*/typedefvoid(^RequestCallback)(UIViewController*result);staticNSString*constcControllerRequestNotification=@"controllerRequestNotification";staticNSString*constcRequestClassNameKey=@"className";staticNSString*constcRequestCallbackKey=@"callback";@int

ios - 为什么这个带有 ARC 的简单应用程序会泄漏?

所以我对objC编程比较陌生。但不是C。在一个更复杂的应用程序中,我认为我有内存泄漏。我编写了这个程序只是为了进行一些测试。该应用程序非常简单:它将一系列整数存储在MutableArray中,这些整数表示已安排的计时器。该应用程序在当前运行循环中有一个NSTimer,它每秒检查一次是否是将计数器与MutableArray的正确元素进行比较的正确时间。一切正常,但调试面板中的内存增长,增长,增长......我已经尝试了一些变体,但我仍然缺少关于ARC的一些东西。我只是不明白,因为ARC不是垃圾收集器,为什么内存会增长以及我做错了什么。这是代码:-(id)initWithLabel:(UI

c++ - 在 Objective-C++ 中编码时应该使用 ARC 吗?

我从事Objective-C++库项目。到目前为止,在我基于C++的代码库中,只有一个ObjC对象包装在C++单例对象中。但是库的客户端代码很可能自始至终都使用ARC。在某些情况下,我需要将ObjC结构(即包含ObjC对象成员的结构)转换为对应的C(++)。我从这篇文章中读到:http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++那个:EvenifyouuseARCinyourproject,IrecommendyoudisableitforC++-heavyObjective-C++fileslike

iphone - ARC 是否意味着我应该声明静态类型而不是 id?

ARC文档在LLVM站点上公开可用,因此NDA在这里不是问题。我发现在为ARC准备代码时,我在很多以前使用(id)的情况下使用了(NSObject*)。例如,如果我正在编写一个initWithParent:方法,它可能是-(id)initWithParent:(NSObject*)parent;我以前会写的地方-(id)initWithParent:(id)parent;我的问题是-这种做法有意义吗? 最佳答案 我相信这适用于大多数情况,至少如果您的对象派生自NSObject(并非所有对象都派生)。Here'saninteresti

ios - 是否可以在 Build Phases 的编译源中不添加 "fno-objc-arc"来启用非 arc 文件?

是否可以在构建阶段不向编译源添加fno-objc-arc以某种方式处理非arc文件?更具体地说,有没有办法在代码中的某处添加fno-objc-arc?原因是,我想开源我的一个使用非arc文件的库,我不希望使用我的库的人手动添加fno-objc-arc。只需拖放... 最佳答案 没有。但是如果你看看一些库做了什么,它们会编写宏来有条件地调用MRC调用,例如release、autorelease等,具体取决于用户是否是否使用ARC进行编译,例如使用__has_feature(objc_arc)测试。然后代码使用这些宏,而不是标准的rel

ios - Objective-C 中的动态缓冲区(带 ARC)

我正在尝试使用NSString对象的-(void)getCharacters:(unichar*)bufferrange:(NSRange)aRange方法,但我有一个第一个参数的问题。此NSString中的字符数不固定,因此我需要动态分配缓冲区(缓冲区的大小必须类似于[my_stringlength]*sizeof(UniChar))。我是Objective-C的新手,不知道该怎么做。我可以像在C程序中那样使用malloc(启用ARC)吗? 最佳答案 是的,您可以malloc()适当大小的缓冲区。您必须free()缓冲区当不再使用