Tag: 自动ref counting

iOS 5 ARC懒惰图片加载库

有没有一个iOS 5弧兼容惰性图像加载库? 我没有find一个。 我的下一个想法是使EGOlazyloading一个编译的库,并将其链接到我的项目。 这会工作吗? 任何指针在进行? 谢谢!

在设备上运行时出现EXC_ARM_DA_ALIGN错误

为什么这个代码在模拟器上运行并在实际设备上崩溃? 我有一个非常简单的代码,绘制一个圆圈。 代码子类UIView并在模拟器上运行正常(iOS 5.1和iOS 6.0)。 Circle.h #import <UIKit/UIKit.h> @interface Circle : UIView @end Circle.m #import "Circle.h" @implementation Circle -(CGPathRef) circlePath{ UIBezierPath *path = [UIBezierPath bezierPath]; [path addArcWithCenter:self.center radius:10.0 startAngle:0.0 endAngle:360.0 clockwise:YES]; return path.CGPath; } – (void)drawRect:(CGRect)rect { CGPathRef circle = [self circlePath]; CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddPath( ctx, circle ); CGContextStrokePath(ctx); } @end 当我尝试在运行iOS 5.1.1的iPad2上执行代码时, […]

使用Objective-C的method_invoke在ARC下调用void方法

在iOS上,我试图使用Objective-C运行库( reference )中的method_invoke函数来调用一个返回types为void的Objective-C方法。 这在非ARC代码中工作正常,但启用ARC后,在调用objc_retain中的方法后,发生崩溃。 我认为发生的事情是编译器注意到method_invoke的id的返回types,并试图保留method_invoke返回的值(注意method_invoke是为了返回它调用的方法的返回值)。 有什么正确的方法让编译器知道在这个特定的情况下, method_invoke的返回值是垃圾,不应该保留? 以下似乎工作,但似乎在概念上是错误的: (void)((__bridge void *)method_invoke(target, method)); 这似乎并没有工作(仍崩溃在objc_retain : (void)method_invoke(target, method) 这里有更正确的方法吗?

为什么在使用ARC + NSZombieEnabled时不会释放对象

我将我的应用程序转换为ARC,并注意到在视图控制器被释放时,在我的一个视图控制器中分配的一个对象没有被解除分配。 花了一段时间才弄明白为什么。 我在debugging过程中为我的项目启用了“僵尸对象”,事实certificate这是事实。 考虑下面的应用程序逻辑: 1)用户调用RootViewController中的动作,使SecondaryViewController被创build并通过presentModalViewController:animated呈现presentModalViewController:animated 。 2) SecondaryViewController包含一个ActionsController ,它是一个NSObject子类。 3) ActionsController在初始化时通过NSNotificationCenter观察一个通知,当它被解除分配时停止观察。 4)用户closuresSecondaryViewController返回到RootViewController 。 启用僵尸对象closures,上述工作正常,所有的对象被释放。 使用ActionsController上的启用僵尸对象不会解除分配,即使SecondaryViewController被释放。 这导致我的应用程序b / c中的问题NSNotificationCenter继续发送通知给ActionsController和结果处理程序导致应用程序崩溃。 我创build了一个简单的应用程序来说明这个在https://github.com/xjones/XJARCTestApp 。 查看与启用僵尸对象控制台日志开/关来validation这一点。 问题(S) 这是启用僵尸对象的正确行为? 我应该如何实现这种types的逻辑来消除这个问题。 我想继续使用启用僵尸对象。 编辑#1:根据凯文的build议,我已经提交给苹果和openradar在http://openradar.appspot.com/10537635 。 编辑#2:澄清一个很好的答案 首先,我是一名经验丰富的iOS开发人员,我完全了解ARC,僵尸对象等。如果我错过了某些东西,当然,我很欣赏任何照明。 其次,对于此特定崩溃的解决方法是,当secondaryViewController被释放时,将observer作为观察者移除。 我也发现,如果我明确地设置actionsController actionsController = nil当secondaryViewController dealloc'ed它将被dealloc'ed。 这两个都不是很好的解决方法B / C它们实际上要求您使用ARC,但代码,如果您不使用ARC(例如显式dealloc中的零iVars)。 一个特定的解决scheme也无助于确定何时这将成为其他控制器中的问题,因此开发人员可以确定何时/如何解决此问题。 一个好的答案将解释如何确定性地知道,当使用ARC + NSZombieEnabled时,你需要做一些特殊的对象,所以它将解决这个具体的例子,也适用于整个项目作为一个整体不离开其他类似的潜力问题。 完全有可能没有好的答案,因为这可能是XCode中的一个错误。 感谢所有!

IOS:自动引用计数

我有一个问题:如果我用ARC创build了一个应用程序,最后一个版本的IOS与我的应用程序兼容是什么? 如果我在AppStore上传我的应用程序,每个人都可以使用我的应用程序? 或者只有具有特定ios版本的设备的用户?

在iOS 3.x上自动引用计数

使用arc编译的应用程序是否可以在iOS 3.1.x设备上使用? 理想情况下,我想使我们的应用程序只与iOS 4.x和更高版本一起工作,但我们有一些用户仍然运行iOS 3.x. 我不再使用iOS 3的设备。 有没有人testing过?

挂钩结束ARC dealloc

鉴于以下简单的实现: @implementation RTUDeallocLogger -(void)dealloc { NSLog(@"deallocated"); } @end 我们在ARC下运行以下代码: @implementation RTURunner { NSArray* arr; } -(void)run{ arr = [NSArray arrayWithObjects:[[RTUDeallocLogger alloc]init], [[RTUDeallocLogger alloc]init], [[RTUDeallocLogger alloc]init], nil]; NSLog(@"nulling arr"); arr = NULL; NSLog(@"finished nulling"); } @end 我们得到以下日志输出: 归零 完成归零 重新分配的 重新分配的 重新分配的 在所有释放完成后,我想执行一个操作。 这可能吗? 这个问题的目的是真正理解ARC的机制,特别是ARC在什么时候触发这些释放,以及当我放弃引用时是否会同步发生。

ARC委托内存pipe理

在苹果的文件中说 如果您需要pipe理资源,而不是释放实例variables,则可以实施dealloc方法。 您不必(实际上不能)释放实例variables,但是您可能需要在系统类和其他未使用ARC编译的代码上调用[systemClassInstance setDelegate:nil]。 这是否包括UIKit和框架委托,例如,一个UIPageViewController的父母有委托UIPageViewControllerDelegate – 这是否必须在dealloc?

加载Apple MAP时的应用程序大小

我正在努力解决看起来很简单的一个问题,但它使应用程序运行大小为30-35 MB。 该应用程序是ARC启用。 这是情况。 1)我从我的方法(视图控制器实例本地的方法)调用UIViewcontroller &推到NavigationController我设置本地实例为零。 btMapViewController *routeMap = [[btMapViewController alloc]init]; [routeMap setSourcLocation:[txtsource text]]; [routeMap setDestinationLocation:[txtDestination text]]; [routeMap setNightFareOn:addNightCharge]; [self.navigationController pushViewController:routeMap animated:YES]; routeMap = nil; 2)新推的控制器初始化一个MKMapView &绘制它的路线。 该应用程序现在运行在35-40 MB的内存上,比第1步之前运行的内存大5倍。 @interface btMapViewController () @property(nonatomic, strong) MKMapView *mapView; @end 3)现在,如果我popupUIViewcontroller (在步骤1中加载的),该应用程序在30-34 MB的内存上运行。 我检查内存跟踪,其清晰。 那么谁在怀念呢? 是MKMap是接口实现的一部分是导致这个问题,或者我应该把它私有的btMapViewController类。 ?

iOS – ViewController在ARC下popup时不被释放

我有一个UITabBarController作为我的主要基本视图控制器。 在第一个选项卡下,我有一个UINavigationController ,当然有一个与它关联的rootViewController ,称之为vcA 。 vcA有一个button,它触发一个子视图控制器, vcB使用代码: [self performSegueWithIdentifier:@"PlacesDetailsSegue" sender:senderDictionary]; 这似乎工作,我看到在仪器中,新的vcB分配正在发生。 当我popup视图控制器回vcA ,一切看起来工作,但似乎vcB从来没有释放(即,dealloc永远不会被调用)。 所以每次从vcA->vcB->vcA->vcB ,内存使用量都会增加。 我在vcB里面有一些实例variables,我在dealloc设置了所有的variables。 但是由于dealloc没有被解雇,他们从来没有被设置nil 。 我有一个引用self.view框架属性的[UIView animationWith…]块,但我已经pipe理,使用代码: __unsafe_unretained BBCategoryViewController *weakSelf = self; [UIView animateWithDuration:duration animations:^{ [_feedTableView setFrame:CGRectMake(0, _navBar.frame.size.height, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height – kMenuBarHeight) ]; } completion:nil]; 有没有人有任何想法如何我可以去找出什么对象仍然保留在一个VCBstream行? 作为参考,我的接口扩展是: @interface BBCategoryViewController () <UITableViewDataSource, UITableViewDelegate> { UITableView *_feedTableView; UIRefreshControl *_refreshControl; BBSearchBar *_searchBar; MKMapView *_mapView; BBNavigationBar […]