gpt4 book ai didi

objective-c - 父类(super class)/子类的调试/发布构建差异

转载 作者:行者123 更新时间:2023-11-29 13:47:45 26 4
gpt4 key购买 nike

我有一个 iOS 项目,它在调试下按预期构建和执行,但在为发布构建时抛出编译错误。该错误与在父类(super class)中声明的 iVar 有关,它特别是

'fetchedResultsController_' undeclared (First use in this function).

这是父类(super class).h。

@interface Super : UIViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController* fetchedResultsController_;
NSManagedObjectContext* managedObjectContext_;
}

@property (nonatomic, retain) NSFetchedResultsController* fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext* managedObjectContext;

@end

和父类(super class).m

@implementation Super

@synthesize fetchedResultsController = fetchedResultsController_;
@synthesize managedObjectContext = managedObjectContext_;

#pragma mark -
#pragma mark Properties

-(NSFetchedResultsController*)fetchedResultsController {
return nil;
}

子类接口(interface)是这样定义的:-

@interface Sub : Super <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
// extra stuff
}

在子类 .m 中,我为 fetchedResultsController 实现了延迟加载

-(NSFetchedResultsController*)fetchedResultsController {

if (fetchedResultsController_ == nil) { // undeclared error here....
//stuff
}
return fetchedResultsController_;

我很困惑,主要是因为我不明白为什么这会在 Debug 中编译而不是在 Release 中编译!

如果有人能找出问题所在,我将不胜感激

最佳答案

这不是您问题的答案,但它会使问题消失。

就目前而言,在您的 Super 类中,拥有实例变量是毫无意义的。您可能应该设置属性 readOnly 以便使用它的人知道不允许设置 fetchedResultController 属性。就目前情况而言,人们有一个合理的期望,即如果他们设置属性,他们在阅读时会得到更多的返回。

因此,将实例变量移动到子类中。在父类(super class)中声明属性readOnly,并在子类中重新声明它readWrite

关于objective-c - 父类(super class)/子类的调试/发布构建差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6579333/

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