在Xcode 4的\'Analyze\'工具中,在Objective-C 2.0中带有下划线的实例变量并使用@synthetize重命名会导致优化警告[重复]

问题描述

                                                                                                                  这个问题已经在这里有了答案:                                                      

解决方法

应该从字面上理解“从未使用过”:您只能在分配中定义其值,而从不使用它。 这与对局部变量的警告相同:如果仅定义它们的值而从不使用它,它们的作用是什么? 因此,静态分析器会警告您,因为通常永远不会访问的变量只是已更改的旧代码的剩余部分,您可以删除它们。但是在您的情况下,这可能会很好。     ,“ 0”行影响属性“ bar”的设置器和获取器的操作方式。该行:
@synthesize bar = _bar;
有效地说:“按照我将其声明为
@property
的方式,为bar输入标准的getter(和setter,如果相关的话),但是将实例变量_bar用于存储”。 当将self.bar用作左值时,实际上是在对
[self setBar:]
进行方法调用,而当将它用作右值时,实际上是在对
[self bar]
进行调用。它看起来像一个普通的C样式结构成员访问,但在内部它是一个方法调用。 因此,ѭ0创建一个合适的getter和setter以用于
self.bar
,但不会更改实例变量的名称。因此,从类本身内部直接访问事物时,应该正确使用ѭ7(尽管有些人现在从样式的角度上对此感到不满意),否则应使用
self.bar
,而不会收到任何分析器警告。 对于最后一个名为
bar
的实例变量,假设您没有在接口内声明一个,则最可能的错误是执行performed0ѭ的方式中的错误。在现代运行时中,您可以为尚未在接口中实际声明的变量提供
@property/@synthesize
对,并且该变量将被神奇地添加到您的接口中。因此,如果您不幸输入错字,可能会意外地这样做。 如果可能,您可以发布您的实际代码吗?     ,请看我的评论。 尝试添加
-dealloc
方法来释放对象。这将“访问” Ivar,并使静态分析器满意。
-(void)dealloc
{
    [bar release]; bar = nil;
    [super dealloc]
}
    ,现在,我可以在8小时后回答我的问题,我正在为在测试或某些过程中与我犯同样错误的任何人这样做。但是,塞尔吉奥和汤米的答案很有帮助。 阅读答案后,我发现自己犯了一个愚蠢的错误。在对类进行编码的测试期间,我在实例变量声明之前删除了下划线。所以我的实际代码确实是这样的:
@interface Foo : NSObject {
    id bar;
}

@property (nonatomic,retain) id bar;

- (id) initWithBar:(id)aBar;

@end

@implementation Foo
@synthesize bar = _bar;

- (id) initWithBar:(id)aBar {
    self = [super init];
    if(self != nil) {
        _bar = aBar;
    }
    return self;
}

@end
因此,分析警告是正确的。对不起,误报警!但感谢您的快速答复。     ,用这个->
@interface Foo : NSObject {
    id _bar;
}
@property (nonatomic,retain) id _bar;

- (id) initWithBar:(id)aBar;

@end

@implementation Foo
@synthesize bar = _bar;

- (id) initWithBar:(id)aBar {
    self = [super init];
    if(self != nil) {
        bar = aBar;
    }
    return self;
}

@end
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...