2011-10-13 21 views
31

tôi sử dụng để khai báo tất cả các thuộc tính delegate nhưcách đề nghị kê khai tài sản đại biểu với ARC

@property (assign) id<FooDelegate> delegate; 

Tôi đã theo ấn tượng rằng tất cả gán nay thuộc tính nên con trỏ yếu, là thế này có đúng không? Nếu tôi cố gắng tuyên bố như sau:

@property (weak) id<FooDelegate> delegate; 

tôi nhận được một lỗi khi cố gắng @synthesize (các thuộc tính yếu autogenerated không được hỗ trợ).

Thực tiễn tốt nhất trong trường hợp này là gì?

+0

Đây là câu hỏi hay và câu trả lời không mang tính kết luận. Tôi đã có thể nghĩ rằng để sử dụng yếu nhưng các khung công tác của Apple sử dụng gán (xem UIPageViewController mà chỉ có sẵn trên iOS5 +). –

Trả lời

22

Sử dụng __unsafe_unretained thay weak cho các dự án ARC nhắm mục tiêu iOS 4 và 5. Sự khác biệt duy nhất là weak nils con trỏ khi deallocated, và nó chỉ được hỗ trợ trong iOS 5.

câu hỏi khác của bạn được trả lời trong Why are Objective-C delegates usually given the property assign instead of retain?.

+0

Tuy nhiên, tôi đang biên dịch nó cho iOS 5, vì vậy tôi đoán nó sẽ hoạt động ...: -? – cfischer

+1

Thật kỳ lạ, nếu "Mục tiêu triển khai" của bạn là 5.0, nó sẽ hoạt động với chỉ (yếu). – Jano

23

Xcode 4 Refactor>Chuyển đổi sang Objective-C ARC biến:

@interface XYZ : NSObject 
{ 
    id delegate; 
} 
@property (assign) id delegate; 
... 
@synthesize delegate; 

thành:

@interface XYZ : NSObject 
{ 
    id __unsafe_unretained delegate; 
} 
@property (unsafe_unretained) id delegate; 
... 
@synthesize delegate; 

Nếu tôi nhớ chính xác nó cũng được nhắc đến trong WWDC 2011 video về ARC .

+0

Tôi sẽ xem lại video. – cfischer

+1

Tại sao không sử dụng 'yếu'? –

+2

Điều này có liên quan * 2 * năm trước, khi một đám đông trẻ hơn và iOS SDK cổ điển phổ biến trên Trái đất. – djromero

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