one alloc, retainCount == 2
I have a following code:
NSLog(@"%d", [chart retainCount]);
self.chart =开发者_如何学Go [[BNPieChart alloc] initWithFrame:self.view.frame];
NSLog(@"%d", [chart retainCount]);
Terminal shows:
[Session started at 2011-03-28 11:09:46 +0200.]
2011-03-28 11:09:51.008 Finance[35111:207] 0
2011-03-28 11:09:51.010 Finance[35111:207] 2
As I know, retainCount should be equal to 1, not 2.
You chart property defined as retain or copy, so:
self.chart = [[BNPieChart alloc] initWithFrame:self.view.frame];
+1 retain at alloc ([BNPieChart alloc]
)
+1 retain at assignment (self.chart =
)
chart is probably a retained property, that's why you have 2 retainCount. That's why you can see some declaration like that :
BNPieChart *aChart = [[BNPieChart alloc] initWithFrame:self.view.frame];
self.chart = aChart;
[aChart release];
Due to self in the statement its retain count is 2 as property of the chart is declared as retain
Remove self from the statement
change
self.chart = [[BNPieChart alloc] initWithFrame:self.view.frame];
to
chart = [[BNPieChart alloc] initWithFrame:self.view.frame];
How do you know that the retainCount should be 1? Are you the author of the -setChart: method you are calling? How is it implemented? Why didn't you include it in the post?
Nothing you have posted here is suspicious.
There are 3 possible problems I see:
- When you synthesized the
chart
property, it was synthesized with aretain
attribute - You have called
retain
in a self-implemented getter method - Whoever wrote the initializer method for
BNPieChart
or its superclass's designated initializer had aretain
in the initializer.
Have you seen the code for BNPieChart
and its non-Cocoa superclasses? If you can, try to post the initializer code.
精彩评论