我有这样的观点:

@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