gpt4 book ai didi

iphone - 为什么 Three20 会做一些奇怪的事情,导致 Xcode 4.2 出现问题?

转载 作者:行者123 更新时间:2023-12-01 18:01:37 26 4
gpt4 key购买 nike

我最近将我的 Xcode 版本升级到了 4.2 - 现在它从 Three20 源中给出了大量警告/问题 - 我所说的大量警告是指大约 30 个警告。

他们中的大多数似乎如下:

Property access result unused - getters should not be used for side effects.



以下是 Three20 源中的一个文件中的几个示例:

TTMessageController.m - 第 542 行
- (NSString*)subject {
self.view; // << warning here
for (int i = 0; i < _fields.count; ++i) {
id field = [_fields objectAtIndex:i];
if ([field isKindOfClass:[TTMessageSubjectField class]]) {
UITextField* textField = [_fieldViews objectAtIndex:i];
return textField.text;
}
}
return nil;
}

TTMessageController.m - 第 556 行
- (void)setSubject:(NSString*)subject {
self.view; // << warning here
for (int i = 0; i < _fields.count; ++i) {
id field = [_fields objectAtIndex:i];
if ([field isKindOfClass:[TTMessageSubjectField class]]) {
UITextField* textField = [_fieldViews objectAtIndex:i];
textField.text = subject;
break;
}
}
}

TTMessageController.m - 第 576 行
- (void)setBody:(NSString*)body {
self.view; // << warning here
_textEditor.text = body;
}

我可以继续下去。

但是为什么three20会这样做呢? - 只是调用一个 getter 而不用它做任何事情似乎很奇怪 - 它是某种初始化吗?

不管它是什么 - Xcode 4.2 似乎不喜欢它......我怎样才能摆脱这些警告?

最佳答案

添加 self.view这些方法将确保 View 被实际加载和初始化。

一个 UIViewController派生对象通常不会加载实际 View ,直到它被迫这样做。通常,一旦将该 View 添加到 super View /窗口中。

通过以这种方式引用 View Controller 的 View ,您可以强制立即加载该 View 。

Three20 在属性 setter 和 getter 中执行此操作,以解决错误的程序流程。

让我们假设它没有这样做,并且还假设您在 View (及其 subview )被初始化之前调用了这些 setter/getter 之一。因此,例如 setBody: 方法会尝试将给定的字符串分配给一个 nil 对象。它不会崩溃,但也不会产生任何影响。

然而,这种在 View Controller 中工作的方式确实会绕过连接 View 的延迟加载。总的来说没有必要担心,它会正常工作,但我总是建议不要像three20那样做。不要通过删除这些行来抵制“修复”这些警告,因为 Three20 本身依赖于其 getter 方法的这些副作用。根据 xlc0212 的评论,您可以将这些行更改为 [self view]; ,结果将保留,但警告将消失。

根据我的经验,尽管 Three20 会在 Xcode4/LLVM3 上发出疯狂的警告,但您通常不会遇到实际问题。它对我来说从来没有失败过。

关于iphone - 为什么 Three20 会做一些奇怪的事情,导致 Xcode 4.2 出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865188/

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