Tag: 自动ref counting

CG Gradient在模拟器上运行,但不在iPhone上运行

我有一个编译没有问题的代码。 它在iPhone模拟器上运行良好,但在我的设备上,我得到了一个EXC_BAD_ACCESS。 这发生在一个帮助函数绘制渐变。 我遵循这个教程来做到这一点。 我有的代码如下: – (void) drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGColorRef whiteColor = [UIColor whiteColor].CGColor; CGColorRef lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0].CGColor; CGColorRef separatorColor = [UIColor colorWithRed:208.0/255.0 green:208.0/255.0 blue:208.0/255.0 alpha:1.0].CGColor; CGRect paperRect = self.bounds; CGRect nameRect = self.nameLabel.frame; CGPoint sepStartPoint = CGPointMake(nameRect.origin.x, nameRect.origin.x + nameRect.size.height + 2); CGPoint sepEndPoint = CGPointMake(nameRect.origin.x […]

如何为特定文件添加ARC?

我创build了一个没有ARC的项目。 我想在我的项目中使用第三方SDK 。 该SDK附带ARC支持。 所以我想为第三方文件添加ARC 。 我可以通过将这个标志添加到构build阶段(如-fno-objc-arc来禁用所有"MYProject"文件的ARC 。 但是我可能会使用大量的文件。 所以最好只为特定的SDK添加ARC 。 那么如何在XCode Project中为单个或特定的SDK文件添加ARC支持? 对于实例:我想使用网格视图。 我在我的项目中添加了GMGridView ,它带有ARC支持。

将Objective-C块定义为属性 – 最佳实践

我最近遇到了一个Apple文档 ,显示了以下块的属性声明: @interface XYZObject : NSObject @property (copy) void (^blockProperty)(void); @end 另外,这篇文章指出: 注意:您应该指定copy作为属性属性,因为需要复制一个块以跟踪其捕获的状态超出原始范围。 这不是您使用自动引用计数时需要担心的事情,因为它会自动发生,但是最好的做法是使用property属性来显示结果行为。 有关更多信息,请参阅块编程主题。 我也读了build议的块编程主题,但没有发现任何相关的东西。 我仍然很好奇,为什么将块属性定义为“复制”是最佳实践。 如果你有一个很好的答案,请尝试区分ARC和MRC的差异,如果有的话。 谢谢

可以在没有__weak对象(iOS 5 + ARC)的情况下通过

是否可以传递[self的任何function]块没有__weak对象从自我? 作为一个例子,这是来自System Framework的有效代码: [UIView animateWithDuration:0.8 animations:^{ //Do animationStuff } completion:^(BOOL finished) { [self anyFunction]; }]; 您可以在完成块中传递[self anyFunction]而不发出警告。 但是,如果您使用完成块编写自己的方法,则会发生以下警告: 在此块中强烈捕获“自我”可能会导致保留周期 。 一个可行的解决scheme非常简单(iOS 5 + ARC)。 在块声明之前: __weak MyClass *weakSelf = self; 并在完成块,你必须打电话: [weakSelf anyFunction]; 但是,回到我的问题:为什么没有必要在系统框架API中使用__weak对象,并使用self没有任何警告。 以及如何在块中实现一个方法,而不需要__weak对象? 感谢你的付出。

带有ARC的Xcode 4.2:即使在固件版本低于5.0的iOS设备上,我的代码也能运行吗?

我更新了我的Xcode到4.2版本,其中包括ARC技术。 这似乎是一件好事,但如果我启用ARC并根据苹果的build议编辑我的代码,我的应用程序即使在4.3.x设备上也可以构build和运行? 还是只为iOS 5的?

为什么在使用ARC的快速枚举循环中需要__strong

当我做了一些simialr以下我得到一个错误说 for (UIView* att in bottomAttachments) { if (i <= [cells count]) { att = [[UIView alloc] extraStuff] } } Fast Enumeration variables cannot be modified in ARC: declare __strong __strong做什么的,为什么我要添加它?

使用ARC,生命周期限定符分配和unsafe_unretained

我对这两个限定符有点困惑…与ARC而不是使用weak (即如果我需要支持iOS 4),我可以使用unsafe_unretained失去自动无function…最终的结果似乎是相似的assign 。 我可以用assign交换unsafe_unretained吗? 这些预选赛是同一件事吗? 苹果文档关于这个参数的任何链接都是非常有趣的…我只能在这里find几行

批量添加“-fno-objc-arc”标志到(多个)源文件

在将Xcode项目转换为ARC(自动引用计数)后,我需要为我的一些源文件(主要是第三方代码)禁用ARC。 我知道我需要为这些文件中的每一个设置“-fno-objc-arc”标志,但Xcode不给我一个批量编辑选项 – 我需要手动将这个标志添加到每个文件,这可能是乏味的如果您需要将其设置为多个文件。 有没有人有一个聪明的方法呢?

错误“autorelease”不可用:在自动引用计数模式下不可用

我试图使用Stig的JSON库进行HTTP请求和parsingJSON。 我得到这个错误'自动释放'是不可用的:当我使用这个代码不可用于自动引用计数模式 NSURLRequest *request2; request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://sandbox.CompanyName.com/api/%@/users/%@/user_badges?url=CompanyName.map2.com&amount=999999999999",[information stringForKey:@"apiKey"] , [information stringForKey:@"userID"]]]]; NSURLConnection *connection2; connection2 = [[NSURLConnection alloc] initWithRequest:request2 delegate:self startImmediately:YES]; NSURLResponse *resp2; NSData *cData2 = [NSURLConnection sendSynchronousRequest:request2 returningResponse:&resp2 error:nil]; NSString *cDataString2 = [[NSString alloc] initWithData:cData2 encoding:NSUTF8StringEncoding]; NSLog(@"getUsersBadges called"); NSError *error4; SBJSON *json4 = [[SBJSON new] autorelease]; // NSArray *luckyNumbers = [json objectWithString:responseString […]

在使用LLVM-GCC编译ARC文件时,在“strong”之前获得“期望的属性”属性

我有一个包含一些使用ARC的文件的项目,有些则不是。 没有禁用ARC的编译器标志。 这工作正常。 我也想确保我的库编译LLVM-GCC和LLVM编译器。 我有这样一个属性: @property (strong, nonatomic) NSString *foo; 但是,当我在LLVM-GCC中编译时,我得到: “在”强“之前预期属性属性” 如果我强调保留,它编译好。 在LLVM编译器中强也工作正常。 我错过了什么? 保留不强的代名词?