Iphone addSubview增量是否保留计数?

Iphone addSubview增量是否保留计数?,iphone,release,retaincount,Iphone,Release,Retaincount,我已经测试过了,看起来是的。所以我的问题是,它是否总是增加保留计数 所以每次我做这样的事情: UIView *theView = [[[UIView alloc] initWithFrame:(CGRect)aFrame] autorelease]; [self.view addSubview:theView]; 我真的在泄漏内存吗 我有一个全局属性@property(非原子,保留)UILabel*ingredientstextlab我在viewDidLoad中用以下代码实例化: 我只是有一个

我已经测试过了,看起来是的。所以我的问题是,它是否总是增加保留计数

所以每次我做这样的事情:

UIView *theView = [[[UIView alloc] initWithFrame:(CGRect)aFrame] autorelease];
[self.view addSubview:theView];
我真的在泄漏内存吗

我有一个全局属性
@property(非原子,保留)UILabel*ingredientstextlab我在
viewDidLoad
中用以下代码实例化:

我只是有一个名为的属性,在我的头中没有它的属性,所以没有getter和setter。在my
viewDidLoad
中:

    ingredientsTextLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ingredientsScrollView.frame.size.width, ingredientsScrollView.frame.size.height)];
    [ingredientsTextLabel setBackgroundColor:[UIColor clearColor]];
    [ingredientsTextLabel setFont:[UIFont fontWithName:@"Helvetica" size:18]];
    [ingredientsTextLabel setText:ingredientsText];
    [ingredientsTextLabel setNumberOfLines:0];
    [ingredientsTextLabel setLineBreakMode:UILineBreakModeWordWrap];
    NSLog(@"%i",[ingredientsTextLabel retainCount]); // here retain count is 1

    CGSize maxSize = CGSizeMake(ingredientsScrollView.frame.size.width, 9999);
    CGSize ingLabSize = [ingredientsText sizeWithFont:ingredientsTextLabel.font
                                    constrainedToSize:maxSize
                                        lineBreakMode:ingredientsTextLabel.lineBreakMode];

    [ingredientsTextLabel setFrame:CGRectMake(ingredientsTextLabel.frame.origin.x, ingredientsTextLabel.frame.origin.x, ingredientsTextLabel.frame.size.width, ingLabSize.height)];
    [ingredientsScrollView addSubview:ingredientsTextLabel];
    NSLog(@"%i",[ingredientsTextLabel retainCount]); // here retain count is 2!
现在我认为这会起作用,然后在dealloc中,我可以释放
ingredientsTextLabel
,但保留计数是2,那么我是否需要在添加子视图后也释放I?我不知道会发生这种事(

是,“addSubview”增加保留计数。这是有意义的,因为该方法存储的子视图在superview也被释放之前不应被释放/释放。当superview被释放时,它也会释放其所有子视图。

不要使用-retainCount。 一个物体的绝对计数是没有意义的

您应该调用
release
的次数与导致对象保留的次数完全相同。不少于(除非您喜欢泄漏),当然也不多于(除非您喜欢崩溃)

有关详细信息,请参阅

如果+new/+alloc/-retain/-copy(NARC)对象,则需要在retain与release(或autorelease)之间取得平衡。故事结束。绝对保留计数,特别是从框架类子类化和/或传递到框架代码中的类实例的绝对保留计数,是一个实现细节,很可能不是您认为应该是的。

实际上是这样的。 你可在以下网址查阅:


当然,superView会在addSubview:上保留子视图,因此在删除子视图时它会释放。

正确。Thomas,在addSubview之后,您不需要再进行另一次释放:您只需担心每个alloc/init释放一次。如果addSubview:增加了保留计数,则他有责任释放它。哦,对……我同意e、 谢谢。这是否意味着,如果我alloc/init一个UIView,将其添加为
self.view
的子视图,然后释放它,保留计数仍然是1?因此,即使我释放了它,我仍然可以发送消息吗?谢谢,这是正确的。但是,如果你存储对UIView的引用,你也应该保留这个UIView。因为这是Cococa/Obj-C style.P.S.链接末尾的冒号是必需的。+1用于回答问题,但你写了“实际上它是”。它是什么?它是做什么的?我很困惑!(使用答案文本下方的“编辑”链接编辑你的答案).Wow,只有一个超过一年的答案,比问题提出的时间晚了一点,而且确实得到了回答!Scraimer我认为Jason对问题“addSubview增量是否保留计数?”说的是“实际上是”。随着自动引用计数的出现,这一切都不再重要了。:pYes,“实际上是”是针对这个问题的“addSubview增量是否保留计数?”