2017-03-07 2 views
0

arc 명명 규칙에서 다음과 같이 말합니다 : init *** 메소드의 반환 값은 호출자에 의해 유지되지만 반환 값없이 init *** 메소드를 작성하면 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이 없기 때문에 매우 운이 좋습니다.

실제로 이것은 수퍼 클래스에 매우 의존적이며 이론적으로 이것은 정의되지 않은 동작입니다. 현재의 구현은 모든 것이 올바르게 작동하도록하지만 실제로는 끔찍한 코드입니다.