我有这样的观点:
@interface MyView ()
@property (nonatomic, strong) UIView* subView;
@end
@implementation MyView
#pragma mark - init && dealloc
-(instancetype)init
{
self = [super init];
if (self){
[self setupSubView];
[self setupAutoLayoutSubView];
}
return self;
}
#pragma mark - setup
-(void)setupSubView
{
_subView = [UIView newAutoLayoutView];
[self addSubview:_subView];
}
-(void)setupAutoLayoutSubView
{
// autolayout: to centralize the subView
// if you don't use PureLayout, you can use the traditional way
[_subView autoCenterInSuperview];
}
@end
当我将此视图添加到Window时,此视图上的引用计数将增加到3 .
MyView* v = [[MyView alloc] init];
NSLog(@"reference counting = %ld",CFGetRetainCount((CFTypeRef)v)); //- 1
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubView:v];
NSLog(@"reference counting = %ld",CFGetRetainCount((CFTypeRef)v)); //- 3 INCORRECT
奇怪的是如果我评论“ autolayout " part from method: " setupAutoLayoutSubView ”,引用计数是正确的(= 2)
或者如果我将我的视图添加到普通视图,引用计数也是正确的
MyView* v = [[MyView alloc] init];
NSLog(@"reference counting = %ld",CFGetRetainCount((CFTypeRef)v)); //- 1
UIView* normalView = [[UIView alloc] init];
[normalView addSubView:v];
NSLog(@"reference counting = %ld",CFGetRetainCount((CFTypeRef)v)); //- 2 : CORRECT