gpt4 book ai didi

ios - 将非 ARC 转换为 ARC

转载 作者:行者123 更新时间:2023-11-29 01:59:20 31 4
gpt4 key购买 nike

我正在开发一个非常旧的非基于 ARC 的项目,并添加了一些基于 ARC 的新 UIViewController(可以通过在构建阶段设置 -fobjc-arc 标志来实现) .

由于ARC和非ARC的混合使用,有时会发生内存泄漏,因为非ARC代码中忘记释放某处,而从这里切换到那里可能会导致这种情况。

因此,我决定将非ARC项目转换为ARC项目,并按照以下方式进行;

Convert non-ARC to ARC project without recreate it

并且只是通过删除 release 或 autorelease 相关的东西来删除 dealloc、viewDidUnload 函数内容。

成功完成后,似乎可以继续工作,但有时会像发送到已释放实例的消息一样崩溃。

我可以找到崩溃的原因并可以修复。

我想从这里知道的是;

  • 在转换时,是否有任何特定的指南或规则来执行此操作,而不是简单地删除与发布、自动发布相关的语句?

任何输入将不胜感激!

最佳答案

自动引用计数 (ARC) 是一种编译器功能,可为 Objective-C 对象提供自动内存管理。

引用此网址:-

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

如上所述,在ARC中,我们不需要添加release和retain方法,因为这将由编译器处理。其实Objective-C的底层流程还是一样的。它在内部使用保留和释放操作,使开发人员更容易编写代码而不必担心这些操作,这将减少编写的代码量和内存泄漏的可能性。

还有一个叫做垃圾收集的原则,它在 Mac OS-X 中与 MRR 一起使用,但由于它在 OS-X Mountain Lion 中被弃用,因此没有与 MRR 一起讨论。此外,iOS 对象从来没有垃圾收集功能。对于 ARC,OS-X 中也不再使用垃圾收集。

这是一个简单的 ARC 示例。请注意,这不适用于在线编译器,因为它不支持 ARC

#import <Foundation/Foundation.h>

@interface SampleClass:NSObject
- (void)sampleMethod;
@end

@implementation SampleClass

- (void)sampleMethod
{
NSLog(@"Hello, World! \n");
}

- (void)dealloc
{
NSLog(@"Object deallocated");
}

@end

int main()
{
/* my first program in Objective-C */
@autoreleasepool{
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass sampleMethod];
sampleClass = nil;
}
return 0;
}

得到以下输出...

demo :- Hello, World!
demo :- Object deallocated

关于ios - 将非 ARC 转换为 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525102/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com