我有一个iOS重构库,我想使用它而没有ARC编译选项.是否有一种方法可以在编译期间检测#ifdef,如果有ARC可用?
我曾经将所有委托属性声明为
@property (assign) id<FooDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
我的印象是所有赋值属性现在都应该是弱指针,这是正确的吗?如果我试图声明为:
@property (weak) id<FooDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
我在尝试@synthesize时遇到错误(不支持自动生成的弱属性).
在这种情况下,最佳做法是什么?
我是Xcode 4.2的新手,我还没有完全掌握ARC的速度.但是,我确实读到@autoreleasepool取代了自动释放池的手动使用,并且在引擎盖下做了一些特殊的魔法来与ARC玩得很好.
然而,当我在Xcode 4.2中启动一个新项目时,特别关闭了ARC选项,我仍然在模板代码中获得了@autoreleasepool语句.
这是什么交易?
我知道你可以使用-fno-objc-arcflag为ARC项目中不支持ARC的文件禁用ARC.
有没有办法在非ARC项目中启用ARC for files支持ARC?
谢谢!
在有关属性1的UIViewController 文档中,它说: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
在更新我的一些代码以与iOS 5 SDK兼容时,我试图通过在Xcode中使用"转换为Objective-C ARC"来重构我的代码并收到错误.我的.h文件中的实例变量发生错误.
NSError **_error;
Run Code Online (Sandbox Code Playgroud)
错误显示"指向非const类型'NSError*',没有明确的所有权." 我该如何解决这个问题?
ARC让我很难跟随演员:
NSDictionary *attributes;
SecItemCopyMatching((__bridge CFDictionaryRef)keychainItemQuery, (CFTypeRef *)&attributes);
Run Code Online (Sandbox Code Playgroud)
错误:ARC不允许使用指向'CFTypeRef '(又名'const void* ')的Objective-C指针的间接指针
我刚刚使用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重构将它们全部删除?
使用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,但是当在块内部时,它们的属性都不会被填充.
鉴于上面列出的项目限制,处理这种情况的最佳方法是什么?
我创建了一个没有的项目ARC.我想在我的项目中使用第三方SDK.这SDK带有ARC支持.所以我想添加ARC第三方文件.我可以通过将此标志添加到构建阶段来禁用ARC所有"MYProject"文件-fno-objc-arc.
但我可能会使用大量文件.所以最好只添加ARC特定的SDK.那么如何SDK在XCodeProject中为单个或特定文件添加ARC支持?
对于实例:我想使用网格视图.我正在添加GMGridView我的项目,它带来了ARC支持.
ios ×5
objective-c ×5
iphone ×3
xcode ×3
ios5 ×2
afnetworking ×1
cocoa-touch ×1
delegates ×1
xcode4.2 ×1