Tag: automatic ref counting

你如何处理“要求(…,保释)”与ARC的声明?

我正在通过苹果示例代码中的方形凸轮的一些示例代码 。 我想用ARC来复制现代项目中的一些function。 但是,有大量的要求陈述,例如: BOOL success = (destination != NULL); require(success, bail); 其中生成编译器错误: 转到受保护的范围。 我的问题是 – 在使用ARC的项目中处理这种语句的适当方式是什么?

如何find记忆警告的真正原因,以及如何解决在iOS应用程序

我已经经历了许多相关的内存pipe理,ARC,内存pipe理技术,如autoreleasepool和使用仪器工具来检测哪些代码导致内存警告,但在我的情况下,我无法找出确切的原因。 基本的细节,你必须知道的应用程序: 我们开发了一个iPad应用程序。 在这种情况下,我们必须在某些情况下使用超过2000个图像,所以当我的应用程序启动时,我们不想显示占位符图像(客户端要求)。因此,我们使用SDWebImage ,将图像存储在磁盘上,晚于我们正在从那里加载图片。 有如此多的核心animation,我已经表演过,如“Gennie效果”,显示popup等许多其他核心animation。 我们在我们的项目中使用了ARC,我们发现由于内存警告应用程序随机崩溃。 我们使用仪器 “分配”来find脏记忆。 之前我们对日志进行了分析,并将SDWebImage中的图片存储在DISK中,解决了应用程序频繁崩溃的问题,但是由于内存警告,应用程序仍然崩溃。 当我们深入了解时,我们发现“匿名虚拟机”在iPad上任何屏幕切换时都会保持加载状态而不释放内存。 这里是我们的设备上的应用程序分析截图。 任何人都可以build议提示或编码技术或任何想法,我们可以减less内存负荷和解决内存警告。 任何帮助将不胜感激。 谢谢。

EXC_BAD_ACCES绘制阴影

我想添加一个阴影到我的UIView,但在我的drawRect方法,我得到一个EXC_BAD_ACCESS。 (我正在使用ARC) -(void) drawRect:(CGRect)rect { CGColorRef lightColor = [UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8].CGColor; CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor; CGContextRef context = UIGraphicsGetCurrentContext(); // Draw shadow CGContextSaveGState(context); CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor); CGContextSetFillColorWithColor(context, lightColor); CGContextFillRect(context, _coloredBoxRect); CGContextRestoreGState(context); } 错误信息:线程1:编程接收到的信号:“EXC_BAD_ACCESS”。 行: CGContextSetFillColorWithColor(context, lightColor); 当我将这一行更改为: [[UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8] setFill]; 我得到同样的错误,但在这一行: CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), […]

什么时候应该使用IBOutlets的弱或强限定符?

可能重复: 在IB之下IBOutlets应该强大还是弱? 在文档中,我读到“Outlets通常应该是弱的,除了从文件所有者到nib文件中的顶层对象(或者在iOS中,一个故事板场景),应该是强大的”。 例子? 我不明白什么时候更好地使用IBOutlet的“弱”而不是“强”属性。

将uiimage设置为nil不会释放ARC的内存

我有一个滚动视图,显示不同的图像,像滚动浏览页面,如PhotoScroller。 我正在使用ARC。 当某人滚动到另一个页面时,我将UIImageView的image属性设置为当前不显示为零(试图)以避免内存崩溃,这仍然发生。 然后,当用户滚动到一个新的页面,该页面的图像被设置为UIImageView的图像属性,以及页面前后的页面(用于平滑查看)。 UIImage的页面都保存在一个数组中。 然而,当我滚动浏览页面时,内存使用量不断增加,就像将UIImageView的image属性设置为nil一样,不会从内存中释放它。 我使用initWithContentsOfFile初始化我的UIImages。 我试图用imageNamed和imageWithContentsOfFile也没有运气。 这是我的scrollview代码: – (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { int indexShown = self.scrollView.bounds.origin.x / kScrollObjWidth; for(NSNumber *index in indexesToRemove) { UIImageView *imgViewToRemove = [[self.scrollView subviews] objectAtIndex:[index intValue]]; imgViewToRemove.image = nil; } [indexesToRemove removeAllObjects]; UIImageView *imgViewToReplace = [[self.scrollView subviews] objectAtIndex:indexShown]; [imgViewToReplace setImage:[pageUIImagesArr objectAtIndex:indexShown]]; [indexesToRemove addObject:[NSNumber numberWithInt:indexShown]]; if(indexShown != 0 && ![[[self.scrollView subviews] […]

AVAudioPlayer立即停止播放ARC

我试图通过AVAudioPlayer播放MP3,我认为这很简单。 不幸的是,这不是工作。 这是我所做的一切: 为了testing,我在Xcode中创build了一个新的iOS应用程序(Single View)。 我将AVFoundation框架添加到项目中,并将#import <AVFoundation/AVFoundation.h>到ViewController.m 我添加了一个MP3文件到应用程序的文档文件夹。 我改变了ViewControllers viewDidLoad:如下: 码: – (void)viewDidLoad { [super viewDidLoad]; NSString* recorderFilePath = [NSString stringWithFormat:@"%@/MySound.mp3", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:recorderFilePath] error:nil]; audioPlayer.numberOfLoops = 1; [audioPlayer play]; //[NSThread sleepForTimeInterval:20]; } 不幸的是,audio开始播放后显然停止。 如果我取消注释sleepForTimeInterval它播放20秒,然后停止。 只有使用ARC进行编译时才会出现此问题,否则,该工作将完美无瑕。