标签: automatic-ref-counting

检查预编译中的ARC

我有一个iOS重构库,我想使用它而没有ARC编译选项.是否有一种方法可以在编译期间检测#ifdef,如果有ARC可用?

objective-c automatic-ref-counting

31
推荐指数
1
解决办法
3328
查看次数

建议使用ARC声明委托属性的方法

我曾经将所有委托属性声明为

@property (assign) id<FooDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

我的印象是所有赋值属性现在都应该是弱指针,这是正确的吗?如果我试图声明为:

@property (weak) id<FooDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

我在尝试@synthesize时遇到错误(不支持自动生成的弱属性).

在这种情况下,最佳做法是什么?

cocoa-touch delegates objective-c automatic-ref-counting

31
推荐指数
2
解决办法
2万
查看次数

没有ARC的@autoreleasepool?

我是Xcode 4.2的新手,我还没有完全掌握ARC的速度.但是,我确实读到@autoreleasepool取代了自动释放池的手动使用,并且在引擎盖下做了一些特殊的魔法来与ARC玩得很好.

然而,当我在Xcode 4.2中启动一个新项目时,特别关闭了ARC选项,我仍然在模板代码中获得了@autoreleasepool语句.

这是什么交易?

xcode xcode4.2 automatic-ref-counting

31
推荐指数
1
解决办法
2万
查看次数

如何在非ARC项目中为文件启用ARC?

我知道你可以使用-fno-objc-arcflag为ARC项目中不支持ARC的文件禁用ARC.

有没有办法在非ARC项目中启用ARC for files支持ARC?

谢谢!

iphone xcode automatic-ref-counting

31
推荐指数
1
解决办法
5906
查看次数

UIViewController不保留其以编程方式创建的UISearchDisplayController

在有关属性1UIViewController 文档中,它说:searchDisplayController

如果以编程方式创建搜索显示控制器,则在初始化时,搜索显示控制器会自动设置此属性.

当我这样创建我的UISearchDisplayController时:

[[[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self] autorelease];
Run Code Online (Sandbox Code Playgroud)

-[UIViewController searchDisplayController]不是nil.但是,它在事件循环结束后被填写,这会导致搜索显示控制器在我触摸搜索栏时不显示.什么都没有崩溃.这很奇怪.如果我省略了呼叫autorelease,一切正常:

[[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
Run Code Online (Sandbox Code Playgroud)

然而,泄漏UISearchDisplayController(我用仪器验证了这一点).由于该searchDisplayController 属性被标记为(nonatomic, retain, readonly)我希望UISearchDisplayController它在设置后保留它.

此stackoverflow文章是相关的.

uiviewcontroller uisearchdisplaycontroller ios automatic-ref-counting

30
推荐指数
1
解决办法
6303
查看次数

自动引用计数:指向非const类型"NSError*"的指针,没有明确的所有权

在更新我的一些代码以与iOS 5 SDK兼容时,我试图通过在Xcode中使用"转换为Objective-C ARC"来重构我的代码并收到错误.我的.h文件中的实例变量发生错误.

NSError **_error;
Run Code Online (Sandbox Code Playgroud)

错误显示"指向非const类型'NSError*',没有明确的所有权." 我该如何解决这个问题?

objective-c ios ios5 automatic-ref-counting

30
推荐指数
2
解决办法
2万
查看次数

用ARC指针铸造

ARC让我很难跟随演员:

NSDictionary *attributes;
SecItemCopyMatching((__bridge CFDictionaryRef)keychainItemQuery, (CFTypeRef *)&attributes);
Run Code Online (Sandbox Code Playgroud)

错误:ARC不允许使用指向'CFTypeRef '(又名'const void* ')的Objective-C指针的间接指针

objective-c automatic-ref-counting

29
推荐指数
2
解决办法
2万
查看次数

自动ARC转换后:将保留的对象分配给不安全的属性; 对象将在分配后释放

我刚刚使用Xcode的自动重构将旧项目转换为ARC.

@property (nonatomic, retain) NSMutableArray *cards;
Run Code Online (Sandbox Code Playgroud)

被替换为:

@property (nonatomic) NSMutableArray *cards;
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为我读到的是"强"是默认状态.但是,以下行给出了标题中的错误:

self.cards = [[NSMutableArray alloc] initWithCapacity:54];
Run Code Online (Sandbox Code Playgroud)

通过strong在以下保留的位置添加回来解决错误:

@property (nonatomic, strong) NSMutableArray *cards;
Run Code Online (Sandbox Code Playgroud)

但是......如果我需要回过头strong来处理每个@property声明,那么retain为什么ARC重构将它们全部删除?

xcode ios automatic-ref-counting

29
推荐指数
2
解决办法
2万
查看次数

ARC,块和保留周期

使用ARC处理面向4.0和5.0的iOS项目.

遇到与块相关的问题,ARC和从块外部引用对象.这是一些代码:

 __block AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
   [operation setCompletionBlock:^ {
       if ([operation isCancelled]) {
           return;
       }

... do stuff ...

operation = nil;
}];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器会发出一个警告,即在块中使用"operation"将导致保留周期.在ARC下,__block现在保留变量.

如果我添加__unsafe_unretained,编译器会立即释放该对象,因此显然不起作用.

我的目标是4.0,所以我不能使用__weak.

我尝试过这样的事情:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation;
Run Code Online (Sandbox Code Playgroud)

但是虽然weakOperation不是nil,但是当在块内部时,它们的属性都不会被填充.

鉴于上面列出的项目限制,处理这种情况的最佳方法是什么?

iphone ios ios5 automatic-ref-counting afnetworking

28
推荐指数
1
解决办法
1万
查看次数

如何为特定文件添加ARC?

我创建了一个没有的项目ARC.我想在我的项目中使用第三方SDK.这SDK带有ARC支持.所以我想添加ARC第三方文件.我可以通过将此标志添加到构建阶段来禁用ARC所有"MYProject"文件-fno-objc-arc.

但我可能会使用大量文件.所以最好只添加ARC特定的SDK.那么如何SDKXCodeProject中为单个或特定文件添加ARC支持?

对于实例:我想使用网格视图.我正在添加GMGridView我的项目,它带来了ARC支持.

iphone objective-c ios automatic-ref-counting

28
推荐指数
2
解决办法
1万
查看次数