2017-03-07 82 views
0

在弧命名約定中說:init ***方法的返回值將由調用者保留,但是如果我編寫了一個沒有返回值的init ***方法,是否會在ARC中導致一些內存問題?在arc中沒有返回值的init **方法會發生什麼?

- (void)initToolbar 
{ 
    // 工具欄 
    UIButton *commendEditButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 0, [Utils getScreenAppSize].width - 15 *2, 32)]; 
    commendEditButton.backgroundColor = [UIColor whiteColor]; 
    commendEditButton.layer.borderColor = UIColorFromRGB(0xb6b6b6).CGColor; 
    commendEditButton.layer.cornerRadius = 4.f; 
    commendEditButton.layer.borderWidth = .5f; 
    [commendEditButton addTarget:self action:@selector(showCommentCompose) forControlEvents:UIControlEventTouchUpInside]; 
    [commendEditButton setImage:[UIImage imageNamed:@"comment-ico-compose"] forState:UIControlStateNormal]; 
    [commendEditButton setImage:[UIImage imageNamed:@"comment-ico-compose"] forState:UIControlStateHighlighted]; 
    [commendEditButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; 
    [commendEditButton setImageEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)]; 
    [commendEditButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 15, 0, 0)]; 
    [commendEditButton.titleLabel setFont:[UIFont systemFontOfSize:15.0f]]; 
    [commendEditButton setTitleColor:UIColorFromRGB(0xc4c4c4) forState:UIControlStateNormal]; 
    [commendEditButton setTitle:@"發表評論" forState:UIControlStateNormal]; 
    NSArray *toolbarItems = [NSArray arrayWithObjects:[[UIBarButtonItem alloc] initWithCustomView:commendEditButton],nil]; 
    _toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, [Utils getScreenSize].height - UI_TOOL_BAR_HEIGHT - UI_STATUS_BAR_HEIGHT - UI_NAVIGATION_BAR_HEIGHT, [Utils getScreenAppSize].width, UI_TOOL_BAR_HEIGHT)]; 
    [_toolBar setBackgroundImage:[UIImage imageNamed: @"toolbar_bg.png"] forToolbarPosition:UIToolbarPositionBottom barMetrics:UIBarMetricsDefault]; 
    _toolBar.items = toolbarItems; 
} 

回答

0

如果您沒有違反許多代碼質量規則,那麼沒有什麼不好的事情會發生。

@implementation A 

- (void)initTest { 
    // do nothing 
} 

@end 


A *instance = [A alloc]; 
[instance initTest]; 

注意實例仍然有着強烈的引用,我們連電話都沒打[super init]

但是我們在這裏很幸運,因爲initNSObject什麼都不做。

在實踐中,這是非常依賴超類,理論上這是未定義的行爲。目前的實現允許一切工作正常,但確實是糟糕的代碼。

相關問題