English 中文(简体)
c. 目标c -- -- 参考点算
原标题:Objective c - Reference counting

直到5分钟前,我确信我对目标参考计算的理解是非常好的,但是当我开始检查保留对象时,我非常惊讶地看到我所看到的东西。

例如,我的View Control有一个UITView:

.h 文件

@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
     UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView; 

.m 文件

@synthesize tableView = _tableView;

- (void)loadView
{
    _tableView = [[UITableView alloc] init];  // STEP ONE
    NSLog(@"tableView retain count: %d",[_tableView retainCount]);

    self.tableView.frame = CGRectMake(0, 0, 320, tableHeight); // STEP TWO
    NSLog(@"tableView retain count: %d",[_tableView retainCount]);  

    [self.view addSubview:self.tableView]; // STEP THREE
    NSLog(@"tableView retain count: %d",[_tableView retainCount]); 
}

令我惊讶的是,

tableView retain count: 1
tableView retain count: 2
tableView retain count: 3

增加1,加上 allec

我还知道,STEP 3HREE 将保留数增加1,加上 addSubview

But whats going on in STEP TWO ??? why did it increase the retain count???
is there something to do with ARC??

最佳回答

根据苹果文件NSBject Protocol unit 方法的参考 方法:

important 此方法通常在调试存储管理问题中毫无价值。 因为任何多个框架对象都保留了一个对象, 以便保持引用, 同时自动释放集合可能持有一个对象的任何数量延迟释放, 您很难从此方法获得有用的信息 。

问题回答

一旦你与 任何框架方法或函数 进行互动, retainCount 方法就变得完全无用,因为你不知道这些在黑盒里做什么(它们可以将你的东西添加到自动释放池中,或者什么的),你应该关心它。

使用 retainCount 来调试记忆管理问题总是一个坏主意。 见< a href=> "https://stackoverflow.com/a/4636477/573626" > 这个回答 更有理由避免它。

我这里有一本方便的指南: 何时使用保留区?

简言之, 保留数量很少意味着你认为它会发生什么。 在不知道 UITableView UIView 是如何执行的情况下, 您不能知道保留数量应该是什么。 我们甚至不考虑自动释放...

self.tableView.frame remain autoreleasen 在从获取器返回 tableView 时将返回 remain

Well in step two :- by using self. tableView, getter of tableview property(which is set retain) will called. So as your property is allocated and retained both so retain count increases respectively.

每当您需要分配保留的财产时, 您应该覆盖其获取方法, 这被称为懒惰即时处理 。

最好把你的桌子视图放在桌子上,比如说。

-(UITableView *) tableView
{
     if(!_tableView) {
          _tableView  =  [[UITableView alloc]init];
     }

    return _tableView;
}




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...