草庐IT

ARC下AutoReleasePool的误区

全部标签

iphone - 带有 ARC 的 Objective-C 委托(delegate)

我正在编写一个具有委托(delegate)对象回调的类,但在使用ARC时遇到问题。例如我有符合ProtocolA的ObjectA(委托(delegate))和ObjectB,它是回调委托(delegate)的对象。我将ObjectA作为@property存储在ObjectB中。在这种情况下,哪些变量应该是强引用,哪些应该是弱引用?我需要避免将“self”从ObjectA传递到ObjectB以设置委托(delegate)导致从强指针转换为弱指针的情况。 最佳答案 为避免循环引用,请将ObjectB的委托(delegate)保存为弱引用

iphone - 带有 ARC 的 Objective-C 委托(delegate)

我正在编写一个具有委托(delegate)对象回调的类,但在使用ARC时遇到问题。例如我有符合ProtocolA的ObjectA(委托(delegate))和ObjectB,它是回调委托(delegate)的对象。我将ObjectA作为@property存储在ObjectB中。在这种情况下,哪些变量应该是强引用,哪些应该是弱引用?我需要避免将“self”从ObjectA传递到ObjectB以设置委托(delegate)导致从强指针转换为弱指针的情况。 最佳答案 为避免循环引用,请将ObjectB的委托(delegate)保存为弱引用

ios - ARC 内存泄漏

我在配置为使用ARC的项目中遇到与NSMutableArray相关的内存泄漏,我认为它应该为您处理这些事情。以下代码触发了NSNumbers的泄漏:NSMutableArray*myArray=[[NSMutableArrayalloc]init];NSNumber*myNumber=[NSNumbernumberWithFloat:10];[myArrayaddObject:myNumber];运行最后一行在调试器中给出以下内容:objc[1106]:Object0x765ffe0ofclass__NSCFNumberautoreleasedwithnopoolinplace-jus

ios - ARC 内存泄漏

我在配置为使用ARC的项目中遇到与NSMutableArray相关的内存泄漏,我认为它应该为您处理这些事情。以下代码触发了NSNumbers的泄漏:NSMutableArray*myArray=[[NSMutableArrayalloc]init];NSNumber*myNumber=[NSNumbernumberWithFloat:10];[myArrayaddObject:myNumber];运行最后一行在调试器中给出以下内容:objc[1106]:Object0x765ffe0ofclass__NSCFNumberautoreleasedwithnopoolinplace-jus

objective-c - 对于 ARC,为什么还要使用 @properties?

在非ARC代码中,保留属性可以使用self.property=语法轻松地为您管理内存,因此我们被教导将它们用于几乎所有事情。但是现在有了ARC,这种内存管理不再是问题,那么使用属性的原因就消失了吗?还有什么好的理由(显然除了提供对实例变量的公共(public)访问之外)继续使用属性吗? 最佳答案 ButnowwithARCthismemorymanagementisnolongeranissue,sodoesthereasonforusingpropertiesevaporate?istherestillanygoodreason(

objective-c - 对于 ARC,为什么还要使用 @properties?

在非ARC代码中,保留属性可以使用self.property=语法轻松地为您管理内存,因此我们被教导将它们用于几乎所有事情。但是现在有了ARC,这种内存管理不再是问题,那么使用属性的原因就消失了吗?还有什么好的理由(显然除了提供对实例变量的公共(public)访问之外)继续使用属性吗? 最佳答案 ButnowwithARCthismemorymanagementisnolongeranissue,sodoesthereasonforusingpropertiesevaporate?istherestillanygoodreason(

ios - 为什么 Xcode 4.2 在 main.m 中使用 @autoreleasepool 而不是 NSAutoreleasePool?

我注意到在Xcode4.2中有一种不同的方式来启动main函数:intmain(intargc,char*argv[]){@autoreleasepool{returnUIApplicationMain(argc,argv,nil,NSStringFromClass([PlistAppDelegateclass]));}}和intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];intretVal=UIApplicationMain(argc,argv,nil,nil);[po

ios - 为什么 Xcode 4.2 在 main.m 中使用 @autoreleasepool 而不是 NSAutoreleasePool?

我注意到在Xcode4.2中有一种不同的方式来启动main函数:intmain(intargc,char*argv[]){@autoreleasepool{returnUIApplicationMain(argc,argv,nil,NSStringFromClass([PlistAppDelegateclass]));}}和intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];intretVal=UIApplicationMain(argc,argv,nil,nil);[po

ios - 如何在 ARC 中模拟 OCMock 中的 ** 参数

我的方法的参数之一是**错误,我的项目处于ARC模式。当为此方法编写stub以调用模拟方法时,我将参数设置为低于可能的值。要么导致编译错误,要么无法匹配调用mock方法的参数。OCMOCK_ANY[OCMArg任意指针]创建了一个NSError对象错误并说[OCMArgsetTo:error]。没有任何作用。如何模拟这种方法?请指教。编辑-(id)init{self=[superinit];if(self){idwcm=[OCMockObjectpartialMockForObject:self];[[[wcmstub]andCall:@selector(mockGetWakeupCa

ios - 如何在 ARC 中模拟 OCMock 中的 ** 参数

我的方法的参数之一是**错误,我的项目处于ARC模式。当为此方法编写stub以调用模拟方法时,我将参数设置为低于可能的值。要么导致编译错误,要么无法匹配调用mock方法的参数。OCMOCK_ANY[OCMArg任意指针]创建了一个NSError对象错误并说[OCMArgsetTo:error]。没有任何作用。如何模拟这种方法?请指教。编辑-(id)init{self=[superinit];if(self){idwcm=[OCMockObjectpartialMockForObject:self];[[[wcmstub]andCall:@selector(mockGetWakeupCa