在Mac和iOS平台上,内存泄漏通常是由未发布的指针引起的.传统上,检查您的分配,副本和保留以确保每个都有相应的发布消息始终是至关重要的.
Xcode 4.2附带的工具链引入了最新版本的LLVM编译器的自动引用计数(ARC),通过让编译器为您的内存管理来完全解决这个问题.这非常酷,它确实减少了大量不必要的,平凡的开发时间,并防止了很多粗心的内存泄漏,这些泄漏很容易通过适当的保留/释放平衡来修复.当您为Mac和iOS应用程序启用ARC时,甚至需要以不同方式管理自动释放池(因为您不应再分配自己的NSAutoreleasePools).
但是,其他的内存泄漏它不能阻止我仍然要注意?
作为奖励,Mac OS X和iOS上的ARC与Mac OS X上的垃圾收集有什么区别?
通过Xcode 4.2中引入的新自动引用计数(ARC),我们不再需要在Objective-C中手动管理保留/释放.
这看起来类似于垃圾收集,就像Mac上的Objective-C和其他语言一样.ARC如何与垃圾收集不同?
在iOS项目中使用新的自动引用计数(ARC)内存管理方式有哪些优缺点?
使用iOS 5.0 SDK进行开发时,您可以选择不使用ARC吗?
您是否为新项目推荐ARC或手动引用计数(MRC)?
使用ARC的应用程序是否能够在比iOS 5.0更旧的操作系统版本上运行?
在C#应用程序中,我总是使用一个app.config文件来保存我的应用程序的一些数据,以便在需要时加载(例如,连接字符串).
在iOS应用程序中保存此类信息的最佳方法是什么?
我正在使用Apple指南中的这个非常简单的代码:
NSMutableData *receivedData;
// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
}
Run Code Online (Sandbox Code Playgroud)
但是对于receivedData = [[NSMutableData data] retain];Xcode 行我给出了一个错误:PushController.m:72:25: ARC forbids explicit …
xcode cocoa memory-management objective-c automatic-ref-counting
尽管StackOverflow上有很好的信息,但我仍然在这里尽力而为......
我正在尝试将OpenGL渲染缓冲区写入iPad 2上的视频(使用iOS 4.3).这正是我正在尝试的:
A)设置AVAssetWriterInputPixelBufferAdaptor
创建一个指向视频文件的AVAssetWriter
使用适当的设置设置AVAssetWriterInput
设置AVAssetWriterInputPixelBufferAdaptor以将数据添加到视频文件中
B)使用该AVAssetWriterInputPixelBufferAdaptor将数据写入视频文件
将OpenGL代码渲染到屏幕上
通过glReadPixels获取OpenGL缓冲区
从OpenGL数据创建CVPixelBufferRef
使用appendPixelBuffer方法将PixelBuffer附加到AVAssetWriterInputPixelBufferAdaptor
但是,我遇到了这个问题.我现在的策略是在按下按钮时设置AVAssetWriterInputPixelBufferAdaptor.一旦AVAssetWriterInputPixelBufferAdaptor有效,我设置一个标志来通知EAGLView创建一个像素缓冲区,并通过appendPixelBuffer将它附加到视频文件中给定数量的帧.
现在我的代码崩溃,因为它试图附加第二个像素缓冲区,给我以下错误:
-[__NSCFDictionary appendPixelBuffer:withPresentationTime:]: unrecognized selector sent to instance 0x131db0
Run Code Online (Sandbox Code Playgroud)
这是我的AVAsset设置代码(很多是基于Rudy Aramayo的代码,它可以在普通图像上工作,但不是为纹理设置的):
- (void) testVideoWriter {
//initialize global info
MOVIE_NAME = @"Documents/Movie.mov";
CGSize size = CGSizeMake(480, 320);
frameLength = CMTimeMake(1, 5);
currentTime = kCMTimeZero;
currentFrame = 0;
NSString *MOVIE_PATH = [NSHomeDirectory() stringByAppendingPathComponent:MOVIE_NAME];
NSError *error = nil;
unlink([betaCompressionDirectory UTF8String]);
videoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:betaCompressionDirectory] fileType:AVFileTypeQuickTimeMovie error:&error];
NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecH264, AVVideoCodecKey,
[NSNumber numberWithInt:size.width], AVVideoWidthKey, …Run Code Online (Sandbox Code Playgroud) 我对Apple材料感到困惑.
我们通过3种方式管理内存,它们是:
我怀疑自动参考计数和手动参考计数之间的区别是什么.
有人可以解释一下吗?
iphone garbage-collection memory-management automatic-ref-counting
只是想知道是否有人知道Objective C 2.0垃圾收集器和IOS 5 SDK中的新自动参考计数器有什么不同?
IOS 5 SDK也使用Objective C 2.0吗?
注意:我的意思是客观的C 2.0 - 我从这个链接http://theocacao.com/document.page/510看到了
谢谢
在ARC(自动引用计数)工作时在Objective-C或Swift中?在编译阶段还是在运行时阶段?那为什么重要呢?