Tag: 自动ref counting

哪些iOS类不支持归零弱引用?

在使用自动引用计数(ARC)时,是否有iOS中的类不能用__weak指针引用? 苹果过渡到ARC发行说明到目前为止只列出了Mac类: 哪些类不支持归零弱引用? 您目前不能创build对以下类的实例的归零弱引用: NSATSTypesetter NSColorSpace NSFont NSFontManager NSFontPanel NSImage NSMenuView NSParagraphStyle NSSimpleHorizontalTypesetter NSTableCellView NSTextView NSViewController NSWindow和NSWindowController 。 另外,在OS X中,AV Foundation框架中没有任何类支持弱引用。 是否有类似的UIKit类的列表,甚至一般的iOS特定的类? 谢谢。

如何忽略“X没有可见的@interface声明select器”?

在ARC之前,我有一个“X可能不响应xxx”的警告 ,这是一个非常无害的警告,并不妨碍它编译。 现在,我试图将我的项目转换为ARC,并且我有一个“没有可见的@接口X表示select器xxx” 错误 ,这阻止了编译。 我确切地知道我在做什么,为什么警告在那里,我可以告诉你,程序是正确的。 以前,编译器编译没有问题,现在不应该停止编译。 确实,类X的接口没有声明这个select器,但是X是一个dynamic处理任何发送给它的消息的类,使用forwardInvocation:这是关于Objective-C的美丽事物之一),所以它的接口不可能声明所有可以被调用的select器。 select器被声明在某个地方,而不是X.

将应用程序转换为ARC而忽略文件?

我想将我的应用程序转换为ARC,但我有一些外部的图书馆和框架,没有投诉ARC。 我知道当你使用ARC开始一个新的项目时,你可以稍后指定要忽略的文件。 但是,将现有应用程序升级到ARC时,可以这样做吗?

如何closures特定文件的ARC

我知道我应该将编译器标志-fno-objc-arc到XCode 4中的编译源来完成此操作。 但它不工作。 即使添加标志,我仍然在我的KeychainItemWrapper.m文件声称我需要使用__bridge C指针错误。 我的项目是ARC安全的,但苹果提供的与钥匙链交互的参考不是。 我想只是禁用单个文件的ARC。 还有什么我在这里失踪?

ARC(iOS)下的Delphi TThread没有被释放

在ARCpipe理下使用Delphi for iOS终止线程的正确方法是什么? 以这个简单的例子: TMyThread = class(TThread) protected procedure Execute; override; public destructor Destroy; override; end; TForm2 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private FThread: TMyThread; public end; { TMyThread } destructor TMyThread.Destroy; begin ShowMessage('Destroy'); inherited Destroy; end; procedure TMyThread.Execute; begin Sleep(5000); end; { […]

在超视图之后,MKMapView仍然将消息发送给委托

编辑:改变了标题。 我当时不知道,但是这是一个重复的为什么我崩溃后MKMapView被释放,如果我不再使用它? 这个问题与使用ARC + NSZombieEnabled时为什么不释放对象类似,但是我认为值得抛出,以防万一有人理解,可以向我解释发生了什么。 另一个问题可能是一个XCode错误,所以我认为这可能是类似的。 场景: RootViewController有一个显示一堆项目的tableView select一个单元格呈现一个模式detailViewController包含另一个tableView detailViewController其中一个表格单元格包含显示该项目位置的MKMapView mapView.delegate = detailViewController closures模式detailViewController 不久之后,应用程序崩溃b / c的MKMapView发送mapView:viewForAnnotation:到现在dealloc'ed detailViewController 。 这个崩溃重新在用户设备上进行临时分发构build,所以这个问题与NSZombieEnabled无关。 我能够通过添加以下内容来解决崩溃问题: _mapView.delegate = nil; 到包含mapView的tableViewCell的dealloc方法。 问题:当cell被释放时,为什么需要删除这个代表呢? 看起来像mapView应该被ARC释放,当细胞被释放时,这是不必要的。 这是一个很好的做法,可以让代表无效,但是我不认为在这种情况下是必须的。 编辑: detailViewController和UITableViewCells所有子视图声明为(nonatomic, strong)属性ala: @property (nonatomic, strong) MKMapView * mapView; 编辑2:猜猜我需要更好地阅读文档。 @fluchtpunkt是正确的。 以下是MKMapView文档中的相关信息: 在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil。 一个你可以做的地方是在你处理地图视图的dealloc方法中。

奇怪的ARC问题不释放在UIView子类伊娃

可能重复: 为什么在使用ARC + NSZombieEnabled时不会释放对象 我目前在一个项目中看到了一个很奇怪的问题。 简而言之,我拥有拥有ViewB ( strong属性)的ViewB 。 ViewA在其初始化ViewA创build其ViewB 。 这两个对象都是UIView子类。 我已经覆盖dealloc在两个,并把一个日志行和一个断点,看看他们是否受到打击。 看来ViewA的dealloc正在被打但不是ViewB的。 但是,如果我在ViewA的dealloc中放置一个self.viewB = nil ,那么它会被击中。 所以基本上是这样的: @interface ViewA : UIView @property (nonatomic, strong) ViewB *viewB; @end @implementation ViewA – (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.viewB = [[ViewB alloc] initWithFrame:self.bounds]; [self addSubview:self.viewB]; } return self; } – (void)dealloc { //self.viewB […]

我需要ARC关键字的属性,我不合成?

我有一个财产,我不合成,而是我自己创build一个getter和setter。 因此,我认为,ARC关键字(强或弱)没有意义,所以我把它们消除了。 这在Xcode 4.3上工作正常,但是当我的同事在XCode 4.2上打开它时,编译器会抱怨没有强/弱关键字,于是我指示他再次无意义地input关键字。 哪个是正确的(有或没有关键字)? 要清楚:我有一个这样的属性@property (nonatomic) NSString *foo和我实现的.m文件-(NSString *)foo和-(void)setFoo:(NSString *)foo并且不包含@synthesize foo 。 另一个相关的细节是没有相应的iVar,而是与Core Data对象进行交互。 这不会在XCode 4.2中编译,除非我为关键字添加强或弱。 编辑我想到了一个更相关的东西,其中一个属性是一个协议,我不知道这是否有所作为。

我必须使用__bridge或__bridge_retained,如果我将自动发布的对象桥接到核心基础?

ARC迁移工具遇到这个问题: NSURL *fileURL = [NSURL fileURLWithPath:path]; AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID); 特别是,它不知道是否应该做__bridge或__bridge_retained。 而我也是。 -fileURLWithPath返回一个自动释放的对象,在这个地方,我不是fileURL的所有者。 但与此同时,对象的保留计数至less为+1。 我敢打赌,这只能用__bridge来完成。

Objective-C ARC并传递C对象数组

我很抱歉,如果这是一个C-noob问题的一点:我知道我需要swot在我的指针。 不幸的是我已经到了最后期限了,所以没有时间去完成整本书的章节,所以我希望能提供更有针对性的build议。 我想在C数组中存储一些Objective-C对象。 我正在使用ARC。 如果我在Mac上,我可以使用NSPointerArray,但我在iOS上,这是不可用的。 我将存储一个三维C数组:概念上,我的维度是日,高度和cacheNumber。 每个元素将是一个指向一个Objective-C对象的指针,或者是NULL。 caching的数量(即cacheNumber维度的大小)在编译时是已知的,但其他两个是未知的。 另外,数组可能非常大,所以我需要为它dynamic分配内存。 关于所有权语义,我需要强烈的对象引用。 我想整个三维数组是一个Objective-C对象的实例variables。 我打算有一个方法是- tableForCacheNumber:(int)num days:(int*)days height:(int*)height 。 该方法应该返回一个二维数组,即一个特定的caching号。 (它也通过引用返回它返回的数组的大小。 我的问题: 我应该用什么顺序放我的尺寸,以便我可以轻松地将指针返回给特定caching号的子数组? (我认为应该是第一,但我不是100%)。 我的方法的返回types应该是什么,以便ARC不会投诉? 我不介意返回的数组是否增加引用计数,只要我知道它在做什么。 我的实例variables保存三维数组是什么types? 我认为它应该只是一个指针,因为这个ivar只是表示指向我的数组中的第一个项目的指针。 正确? 如果是这样,我该如何指定? 当我创build三维数组(对于我的伊娃),我想我会做一些像calloc(X * Y * Z, sizeof(id)) ,并将结果投给我的伊娃的types? 当从ivar中的三维数组中访问项目时,我相信我必须每次都使用(*myArray)[4][7][2]来取消引用指针。 正确? 我从方法返回的二维数组会被同样访问吗? 我是否需要使用objc_returns_inner_pointer标记返回的二维数组? 我再次抱歉,这是一个不好的堆栈溢出问题(太长,部分太多)。 我希望SO的公民会原谅我。 为了提高我的互联网业力,也许我会在这个项目出货时把它写成博客文章。