关于UITabBarItem的问题

时间:2011-05-18 11:01:05

标签: objective-c cocoa-touch xcode

- (id) init

{
    [super initWithNibName : nil
                    bundle : nil];  
    UITabBarItem *tbi = [self tabBarItem];  
    [tbi setTitle : @"Hypnosis"];   
    UIImage *i = [UIImage imageNamed : @"Hypno.png"];   
    [tbi setImage : i];         
    return self;        
}

考虑上面的示例代码,我的问题是:

1

有一个“setImage”方法调用,但我找不到相应的“Image”属性 在文档中。

2

UIImage * i被语句“[tbi setImage:i]”分配给Image属性。 “* i”是否被tbi保留?如果是这样,我们应该在转让后立即发布“i”吗?

希望有知识渊博的人帮助我找到答案。

2 个答案:

答案 0 :(得分:1)

不需要为类声明image属性具有setImage:方法 - 可以通过setter / getters的存在暗示存在属性。 TabBarItem将保留i - 这是setter API的责任。这是标准行为。最后,在调用i后不要发布setImage:。您没有i的拥有引用,因为它是从工厂方法返回的,而不是[[alloc] init]调用。 HTH

答案 1 :(得分:0)

1)首先,如果有setX:方法,则不一定意味着有x属性(我想你明白了)。但是当我检查文档时,既没有image属性,也没有setImage:,所以它是私有api。正如在ViewController PG中所说,你不应该要求现有的UITabBarItem,而是自己创建并分配给你的tab tabBarItem属性。像这样:

...

UIImage *image = [UIImage imageNamed : @"Hypno.png"];
UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Hypnosis" image:image tag:0];
self.tabBarItem = theItem;
[theItem release];

...

2)在这种情况下你不应该发布图像,因为你不拥有它。它由imageNamed:方法自动释放。但是,如果您通过[[UIImage alloc] init..]方法创建它,那么您有责任减少其保留计数。 tabBarItem将保留“是”图像。

希望这会有所帮助!