代码之家  ›  专栏  ›  技术社区  ›  user387184

XCode的构建和分析-在发现潜在泄漏时是错误的还是正确的?

  •  0
  • user387184  · 技术社区  · 16 年前

    Xcode的“构建和分析”有多可靠?

    我一直在寻找它发现的“潜在泄漏”,但我不明白。

    代码如下:

    -(void)viewDidLoad{
    
        self.navigationItem.leftBarButtonItem = self.editButtonItem;
    
        UIBarButtonItem *aBI = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                            target:self action:@selector(add:)];
    
        self.navigationItem.rightBarButtonItem = aBI;
        aBI.release;
    
        UIBarButtonItem *eB = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize
                                                                            target:self action:@selector(EinstellungenTapped:)];
        UIBarButtonItem * space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    
    
        UIBarButtonItem *emailB = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
                                                                           target:self action:@selector(emailTapped:)];
    
    
        NSArray* toolbarItems = [NSArray arrayWithObjects: eB,space,emailB,
                                 nil];
    
        [self setToolbarItems: toolbarItems];
    
        eB.release;      // <------- Potential leak ??????
        emailB.release;  // <------- Potential leak ??????
        space.release;  // <------- Potential leak ??????
        }
    

    为什么这三个是潜在的泄漏?

    即使没有指派给国家安全局,它也在告诉我泄漏的事。

    非常感谢。。。。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Lily Ballard    16 年前

    我想问题是因为你非常错误地使用了点语法并且混淆了静态分析器。你不应该 曾经 类型 anObject.release ,因为那是完全错误的意思。点语法是为访问属性而设计的,具有特定的语义含义,例如访问属性。任何修改对象本身的东西都应该是一个方法,而不是一个属性,应该这样调用。

    [eB release];
    [emailB release];
    [space release];
    

    最后一点,事实上 eB.release