2012-01-21 19 views
7
- (id)init{ 
    if(![super init]){ 
     return nil; 
    } 
    _rssItems = [[NSMutableArray alloc]init]; 
    return self; 
} 

Nếu tôi phân tích dự án của tôi tôi nhận được cảnh báo này:Instance biến được sử dụng trong khi 'tự' không được đặt thành kết quả của '[(siêu hay tự) init ...]'

Instance biến được sử dụng trong khi 'tự' không được đặt thành kết quả của '[(siêu hoặc tự) init ...]'

Tôi phải thay đổi điều gì?

Cảm ơn!

Trả lời

17

Ngày nay, đề nghị chính thức của Apple là:

- (id)init{ 
    self = [super init]; 
    if(self){ 
     _rssItems = [[NSMutableArray alloc]init]; 
    } 
    return self; 
} 

Ý tưởng là init (đặc biệt là trong trường hợp này, [super init]) được phép trở về một đối tượng khác hơn là tự ngã, và hành vi dự kiến ​​trong trường hợp đó là làm việc với đối tượng đó thay thế - cách dễ nhất để giải quyết vấn đề này là chỉ cần đặt self thành bất kỳ giá trị nào trả về là super. Cũng lưu ý rằng return self; hoạt động tốt cho dù self là không hoặc không, do đó sự đảo ngược của if của bạn.

Tất nhiên, nhất lớp không thực hiện thủ thuật chuyển mạch này - nhưng đây là thực hành tốt anyway vì Apple hy vọng tất cả mọi người phải sử dụng mô hình này chính xác cho init họ, do đó ngay cả khi lớp con của bạn hiện đang hoạt động mà không gán cho self, họ có thể dễ dàng thay đổi hành vi đó trong tương lai mà không cần cảnh báo.

+0

Cảm ơn bạn nhưng hiện tại ứng dụng của tôi đã gặp sự cố vì EXC_BAD_ACCESS ... Lạ vì Vấn đề trước đã biến mất. – AmiiQo

+0

Chỉ cần giải quyết nó, cảm ơn! – AmiiQo

+0

Cảm ơn andyvn22. – Morkrom

Các vấn đề liên quan