8

Giả sử rằng tôi đã viết đoạn code dưới đây trong một lớp A:Trở đối tượng autoreleased sử dụng ARC

-(NSArray *) returnListNames { 

    NSArray *returnList = [NSArray arrayWithArray:myListNames]; 

    return (returnList); 
} 

Và trong một lớp học BI nhận được rằng danh sách trong một số phạm vi theo cách này:

{ 
    /* Without ARC I would retain the array returned from ClassA 
     to guarantee its reference like this: 
     [[myClassA returnListNames] retain]; */ 

    NSArray *myNames = [myClassA returnListNames]; 

} 

Xét rằng các returnList được phân bổ bằng cách sử dụng một phương pháp autorelease, làm thế nào tôi có thể đảm bảo rằng tôi sẽ không mất tham chiếu đến nó bằng cách sử dụng ARC (theo đó tôi không thể sử dụng retain)? Tôi có phải sử dụng [[NSArray alloc] init] trên mảng myNames không? Hoặc tôi phải sử dụng alloc trên returnList thay vì phương pháp tự động phát hành? Hoặc tôi có thể chỉ dựa vào ARC? Hoặc là có một giải pháp?

Trả lời

12

ARC sẽ xử lý điều này cho bạn, vì vậy bạn chỉ có thể dựa vào nó và đi về doanh nghiệp của bạn với mảng đó. Nếu thấy rằng bạn cần phải giữ lại myNames, nó sẽ thêm cuộc gọi giữ lại cho bạn ví dụ hoặc thực hiện bất kỳ điều gì khác thực sự thực hiện khi bạn biên dịch mã sử dụng mã đó.

+0

Vì vậy, tôi có thể tiếp tục sử dụng phương pháp autorelease khi phân bổ * returnList rằng ARC sẽ đảm bảo sự tồn tại của nó. Đúng? –

+2

Đúng vậy. Nó thậm chí không quan trọng cho dù bạn sử dụng một phương pháp autorelease hoặc phân bổ-init. – BoltClock

+0

@BoltClock khi đối tượng được nhả trong trường hợp này? – Yadnesh

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