相关疑难解决方法(0)

Objective-C中的自动引用计数不会阻止或最小化哪种泄漏?

在Mac和iOS平台上,内存泄漏通常是由未发布的指针引起的.传统上,检查您的分配,副本和保留以确保每个都有相应的发布消息始终是至关重要的.

Xcode 4.2附带的工具链引入了最新版本的LLVM编译器的自动引用计数(ARC),通过让编译器为您的内存管理来完全解决这个问题.这非常酷,它确实减少了大量不必要的,平凡的开发时间,并防止了很多粗心的内存泄漏,这些泄漏很容易通过适当的保留/释放平衡来修复.当您为Mac和iOS应用程序启用ARC时,甚至需要以不同方式管理自动释放池(因为您不应再分配自己的NSAutoreleasePools).

但是,其他的内存泄漏它不能阻止我仍然要注意?

作为奖励,Mac OS X和iOS上的ARC与Mac OS X上的垃圾收集有什么区别?

macos memory-leaks objective-c ios automatic-ref-counting

234
推荐指数
3
解决办法
4万
查看次数

IBOutlet和其他弱者或弱者

我已将项目切换到ARC,我不明白是否必须使用strongweak用于IBOutlets.Xcode执行此操作:在界面构建器中,如果创建一个UILabel例如我将它与助理编辑器连接到我的ViewController,它创建:

@property (nonatomic, strong) UILabel *aLabel;
Run Code Online (Sandbox Code Playgroud)

它使用了strong,而不是我在RayWenderlich网站上阅读的教程说:

但对于这两个特殊属性我还有其他计划.而不是 strong,我们将其声明为weak.

@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet UISearchBar *searchBar;
Run Code Online (Sandbox Code Playgroud)

Weak是所有插座属性的推荐关系.这些视图对象已经是视图控制器视图层次结构的一部分,不需要在其他地方保留.声明出口的最大好处weak是可以节省编写viewDidUnload方法的时间.

目前我们viewDidUnload看起来像这样:

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.tableView = nil;
    self.searchBar = nil;
    soundEffect = nil;
}
Run Code Online (Sandbox Code Playgroud)

您现在可以将其简化为以下内容:

- (void)viewDidUnload
{
    [super viewDidUnload];
    soundEffect = nil;
}
Run Code Online (Sandbox Code Playgroud)

所以使用weak,而不是strong,并删除设置为nil videDidUnload,而不是Xcode使用strong,并使用self... = nil …

weak-references ios ios5 automatic-ref-counting strong-references

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

在使用LLVM-GCC编译ARC文件时获取"在'strong'之前预期属性属性"

我有一个项目,其中包含一些使用ARC的文件,有些则没有.那些没有禁用ARC的编译器标志的那些.这很好.

我还想确保我的库编译LLVM-GCC和LLVM编译器.

我有这样的房产:

@property (strong, nonatomic) NSString *foo;
Run Code Online (Sandbox Code Playgroud)

但是,当我在LLVM-GCC中编译时,我得到:

"在'强'之前预期属性属性"

如果我改变强势保留,它编译好.Strong在LLVM编译器中也可以正常工作.

我错过了什么?保留不是强有力的代名词吗?

iphone ios automatic-ref-counting

9
推荐指数
2
解决办法
9886
查看次数