Tag: 自动ref counting

iOS 7.0和ARC:UITableView从未在行animation之后解除分配

我有一个非常简单的testing应用程序与ARC。 其中一个视图控制器包含UITableView。 在做animation之后( insertRowsAtIndexPaths或者deleteRowsAtIndexPaths ),UITableView(和所有的单元格)永远不会被释放。 如果我使用reloadData ,它工作正常。 iOS 6没有问题,只有iOS 7.0。 任何想法如何解决这个内存泄漏? -(void)expand { expanded = !expanded; NSArray* paths = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0],nil]; if (expanded) { //[table_view reloadData]; [table_view insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationMiddle]; } else { //[table_view reloadData]; [table_view deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationMiddle]; } } -(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return expanded ? 2 : 0; } […]

ARC圆形保留检测

我移植了一些旧的代码到Objective-C ARC(自动引用计数),它似乎很好。 除了一个相当大的高级对象,当它从我的导航栈中popup时,并没有被释放,这让我相信我有一个保留循环的地方,ARC对我隐藏起来(或者至less难以追踪)。 什么是最好的方法来淘汰这个潜在的保留周期和/或什么是一个好方法来确定在ARC下的内存泄漏的原因? 谢谢!

链接错误与Parse.framework iOS

我试图在我的项目中导入分析框架。 我确定它对我的项目很满意,而且我也找不到它是否“敏感”。 我的项目是基于弧的。 这是我得到的错误: Undefined symbols for architecture i386: "_SCNetworkReachabilityCreateWithName", referenced from: -[PFCommandCache init] in Parse(PFCommandCache.o) +[PFInternalUtils(Reachability) isParseReachable] in Parse(PFInternalUtils.o) "_SCNetworkReachabilityGetFlags", referenced from: ___22-[PFCommandCache init]_block_invoke in Parse(PFCommandCache.o) +[PFInternalUtils(Reachability) isParseReachable] in Parse(PFInternalUtils.o) "_SCNetworkReachabilityScheduleWithRunLoop", referenced from: -[PFCommandCache init] in Parse(PFCommandCache.o) "_SCNetworkReachabilitySetCallback", referenced from: -[PFCommandCache init] in Parse(PFCommandCache.o) "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from: -[PFCommandCache dealloc] in Parse(PFCommandCache.o) "_SecItemAdd", referenced from: […]

自动引用计数:指向非常量types“NSError *”的指针,没有明确的所有权

在更新我的一些代码与iOS 5 SDK兼容时,我试图通过Xcode中的“转换为Objective-C ARC”来重构我的代码,并收到错误消息。 错误发生在我的.h文件中的一个实例variables。 NSError **_error; 错误说“指向非常量types'NSError *'没有明确的所有权。 我该如何解决这个问题?

将代表设置为ARC下的零?

我正在使用ARC编写iOS应用程序,并定位iOS 5+。 假设我写了一个具有委托属性的自定义视图对象。 在声明委托属性时,我把它作为避免保留循环的弱引用,以便在实际委托对象(控制器)被销毁时,我的自定义视图也将被销毁,如下所示: @interface MyCustomView : UIView @property (nonatomic, weak) id<MyCustomViewDelegate> delegate; @end 一切都很好。 好了,现在我正在编写控制器对象,并且它引用了两个视图对象:我的自定义视图和Apple提供的UIKit视图,这两个视图都声明委托属性,控制器是这两个视图的委托。 也许它看起来像这样: @interface MyViewController : UIViewController <MyCustomViewDelegate, UITableViewDataSource, UITableViewDelegate> @property (nonatomic, strong) MyCustomView *customView; @property (nonatomic, strong) UITableView *tableView; @end @implementation MyViewController – (void)viewDidLoad { self.customView.delegate = self; self.tableView.dataSource = self; self.tableView.delegate = self; } @end 我的问题是这样的:我是否需要重写dealloc设置一个或两个委托为零? 我的意思是,根据我的理解,UIKit视图(在这种情况下, tableView )的委托属性实际上并没有被声明为弱引用,而是一个__unsafe_unretained引用,用于向后兼容非ARC版本的iOS。 […]

ASIHTTPRequest / ASIFormDataRequest – 在ARC下的块内引用请求对象

非常类似于这个问题 ,我试图将使用ASIHTTPRequest & ASIFormDataRequest的项目转换为ARC。 在我的视图控制器类中,我经常引用并使用完成块中的request对象的属性(查看响应代码,响应数据等): __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:SOME_URL]]; [request setCompletionBlock:^{ if([request responseStatusCode] == 200) ….etc 当转换到ARC我得到的警告: 在这个区块强烈的捕获'请求'很可能会导致一个保留周期 什么是正确的方法来做到这一点? 另一个SO用户在上一个线程中注意到,简单地添加__weak可能会导致请求在块完成之前被释放,我相信这是正确的。 如何在ARC下的完成/失败块中正确引用这些属性?

Swiftpipe理内存

这个问题已经清理完毕,重要的信息转移到了下面的答案。 我有一些关于内存pipe理的问题。 我正在构build一个照片编辑应用程序。 所以保持内存使用率低是重要的。 另外我不会发布代码,因为在做一件特定的事情时我没有大的内存泄漏。 发生的一切,我只是失去了几个KB / MB。 而成千上万的代码行来find千字节是没有趣的;) 我的应用程序使用核心数据,很多cifilter的东西,位置和基础知识。 我的第一个看法只是一个tableview,花了我大约5mb的内存。 然后,您拍摄一些照片,应用一些filter,将其保存到核心数据,然后返回到第一个视图。 除了驱动第一个视图所需的数据之外,是否有可能真正摆脱内存中的所有内容? (这非常保存和真棒5MB) 或者即使你把所有东西都设置为零,总会有东西留下来。 奖金问题: UIImageJPEGRepresentation和UIImagePNGRepresentation之间的文件大小/ CPU负载有差异吗? 我知道你可以用JPEG方法设置压缩质量(在CPU / GPU上更难?)。 只是想尽一切办法减less内存压力。 更新: 有人指出,这个问题可能太模糊了。 我在某个时候遇到的问题如下: 在某些情况下,峰值内存使用率过高 导航到第二个视图控制器,并返回导致泄漏 编辑图像会导致内存泄漏。 将filter应用于超过4-5个图像导致内存不足导致崩溃,此时没有更多的内存泄漏。 (在仪器中validation) 这是所有的testing在iPhone 4s,而不是模拟器。 这里有一个meme来点亮这个网站的心情。

如何知道编译器是否启用了ARC支持?

我需要在我的iOS应用程序中编写一个库。 该声明应该被预处理定义为: myObject … #if ARC // do nothing #else [myObject release] #endif 或运行时过程如下: if (ARC) { // do nothing } else { [myObject release]; } 我能怎么做? 请帮帮我! 谢谢。

performSelector ARC警告

可能重复: performSelector可能会导致泄漏,因为它的select器是未知的 我在非ARC工作没有错误或警告的代码: – (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { // Only care about value changed controlEvent _target = target; _action = action; } – (void)setValue:(float)value { if (value > _maximumValue) { value = _maximumValue; } else if (value < _minimumValue){ value = _minimumValue; } // Check range if (value <= _maximumValue & value >= _minimumValue) { […]

对于IBOutlet和其他

我已经将我的项目切换到了ARC,而且我不明白我是否必须使用IBOutlet strong或weak 。 Xcode做到这一点:在界面生成器中,如果创build一个UILabel例如,我将其与助理编辑器连接到我的ViewController ,它创build此: @property (nonatomic, strong) UILabel *aLabel; 它使用strong ,而是我阅读RayWenderlich网站上的一个教程,说: 但是对于这两个特定的属性我有其他的计划。 我们将宣布它们变weak ,而不是strong 。 @property (nonatomic, weak) IBOutlet UITableView *tableView; @property (nonatomic, weak) IBOutlet UISearchBar *searchBar; 所有出口物业的推荐关系都Weak 。 这些视图对象已经是视图控制器视图层次结构的一部分,不需要保留在其他地方。 声明您的网点weak的一大优点是可以节省您编写viewDidUnload方法的时间。 目前我们的viewDidUnload如下所示: – (void)viewDidUnload { [super viewDidUnload]; self.tableView = nil; self.searchBar = nil; soundEffect = nil; } 现在可以将其简化为以下内容: – (void)viewDidUnload { [super viewDidUnload]; soundEffect […]