gpt4 book ai didi

objective-c - ivar 的分配不起作用

转载 作者:行者123 更新时间:2023-12-01 17:01:46 24 4
gpt4 key购买 nike

我看到一个奇怪的情况,即对实例变量的简单赋值不起作用。右手对象是非零,但拒绝分配给实例变量(具有相同的类型)。这在应用程序中并没有始终如一地发生。

我有这样的课:

@interface FooViewController : UIViewController {
UIView *contentView;
BOOL testBool;
}
@end
@implementation FooViewController
- (void)viewDidLoad {
UIView *theContentView = [[UIView alloc] initWithFrame:self.view.bounds];

// this assignment fails for some reason:
contentView = [theContentView retain];
/* at this point, contentView == nil */

UIView *bar = theContentView; // this works
testBool = YES; // this works
}
@end

和这样的子类:
@interface BarViewController : FooViewController {
}
@end

当我从 nib 实例化 BarViewController 时,当执行到达父类(super class)中定义的 viewDidLoad 时,就会发生上述奇怪的行为。实例变量“拒绝分配”。

但是,如果我向子类添加一个虚拟实例变量,则会返回预期的行为。实例变量在 viewDidLoad 中正确分配。

我在使用 Xcode 4.0.2 的模拟器中的 iOS 4.3 运行时看到了这一点。这发生在 LLVM+GCC 和 GCC 中。

这不是孤立发生的。当我在测试项目中尝试这个时,它运行正常。

最佳答案

对不起,我不相信你。

我的第一个问题是您如何确定 contentView等于零?有断点之后 那作业?如果你在赋值的那一行打断,那一行还没有被执行,所以 contentView届时将为零。

如果您正在测试 contentView在其他一些方法中,它可能只是 viewDidLoad尚未运行。

显示以下输出:

- (void)viewDidLoad {
UIView *theContentView = [[UIView alloc] initWithFrame:self.view.bounds];

// this assignment fails for some reason:
contentView = [theContentView retain];
/* at this point, contentView == nil */

NSLog(@"theContentView: %p", theContentView);
NSLog(@"contentView: %p", contentView);

UIView *bar = theContentView; // this works
testBool = YES; // this works
}

如果他们不同,我会开始相信你。 (好吧,也许不是,我仍然会考虑你在撒谎的可能性。)

关于objective-c - ivar 的分配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053901/

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