80

Sử dụng Xcode 4.2 và ARC, tôi nhận thấy rằng mã tự động tạo ra cho một NSManagedObject vẫn đọc như thế này đối với tài sản:@property định nghĩa với ARC: mạnh mẽ hoặc giữ lại?

@property (nonatomic, retain) NSString * someString; 

1) nên không retain bây giờ sẽ được thay thế với strong hoặc weak?

2) Tại sao các mã tự động tạo ra vẫn sử dụng retain

3) thay thế chính xác cho retain trong bản Tuyên Bố khách sạn này là gì?

Tôi hiện đang gỡ lỗi sự cố bằng cách sử dụng NSFetchRequest và tôi nghĩ đây có thể là nguồn gốc của sự cố. Suy nghĩ?

+0

Bạn nên chấp nhận câu trả lời ngay bây giờ. – Rivera

Trả lời

40

Để trả lời tất cả ba câu hỏi trong một: retainstrong đồng nghĩa với nhau, vì vậy cả hai đều đúng. The documentation bang

retain ngụ ý __strong sở hữu

strong ngụ ý __strong sở hữu

+0

Cảm ơn bạn đã phản hồi. Tôi đã đọc tài liệu Apple trên ARC. Tôi hiểu rằng giữ lại dịch mạnh mẽ. Tuy nhiên, điều này không giải thích tại sao mã được tạo tự động bởi Xcode khi tạo mới NSManagedObject (s) sẽ cung cấp cho bạn @property (nonatomic, retain) – one09jason

+3

Trừ khi tôi thiếu một cái gì đó ở đây, giải thích nó một cách hoàn hảo. Mã mà Xcode tạo ra là chính xác vì việc giữ lại hoạt động mạnh như vậy, vậy câu hỏi của bạn ở đâu? – Phlibbo

+6

Nếu bạn chạy phép tái cấu trúc ARC trên dự án của mình, nó sẽ chuyển đổi tất cả 'keep's to' strong's. Vì vậy, ấn tượng của tôi là 'strong' là thuộc tính ưa thích, nhưng trình tạo NSManagedObject chưa được cập nhật. Nhưng đó chỉ là đoán; có lẽ không ai ở Apple coi sự khác biệt là quan trọng. – theory

110

1) nên không giữ lại bây giờ sẽ được thay thế với mạnh hay yếu?

No. Bạn không thể thay thế giữ lại với yếu; họ khác nhau. Và mạnh là một từ đồng nghĩa 100% để giữ lại; chúng giống nhau. Bạn có thể sử dụng một trong hai, vì vậy không có "nên" ở đây. Bạn có thể thay thế giữ lại với mạnh mẽ nếu bạn thích, nhưng bạn không phải.

2) Tại sao các mã tự động tạo ra vẫn sử dụng giữ

Tại sao không? Xem (1). giữ lại là chính xác vì vậy không có vấn đề gì.

3) Thay thế chính xác để giữ lại trong bản sao kê tài sản này là gì?

Không cần phải thay thế phần giữ lại.

Tôi hiện đang gỡ lỗi một vấn đề khi sử dụng NSFetchRequest và tôi nghĩ đây có thể là nguồn gốc của vấn đề. Suy nghĩ?

Nó không phải.

+9

Tôi cho rằng mặc dù, đối với một cộng đồng bị ám ảnh (và đúng như vậy!) Với các tiêu chuẩn và tuân thủ Apple Way (s), nhìn thấy giữ lại trong các mô hình tổng hợp chỉ là phụ. Tôi thay đổi để mạnh mẽ chỉ để được pedantic. Đối với một, làm cho ack-ing một dự án lớn cho cú pháp không đúng một chút dễ dàng hơn, trong số một nửa tá những thứ nhỏ khác. –

+12

Không chắc chính xác kiến ​​trúc cảm xúc là gì. Bạn có thể cung cấp một ví dụ trong "ánh sáng lạnh, trong ngày?" ;-) false và NO là các từ đồng nghĩa, nhưng chúng ta sử dụng NO theo quy ước trong Objective-C. Có nhiều lý do để nhất quán; không nhất quán là tốt, nhưng gánh nặng của việc chứng minh sự xứng đáng là trên một quy ước phá vỡ, không phải là người tôn trọng nó. –

+9

Với tất cả sự tôn trọng, @EricGoldberg có một điểm: quy ước quan trọng. Và bởi vì bạn sẽ là '__strong' ở những nơi khác trong mã của bạn (không có' __retain'), bạn có thể muốn chuyển sang sử dụng 'strong' để nhất quán. Điều này tương tự như việc thụt lề mã của bạn một cách nhất quán, mặc dù mã sẽ chạy tốt mà không có điều này. –

4

Trước ARC, bạn phải 'giải phóng' một đối tượng được giữ lại. Điều đó có nghĩa là giữ lại có một phần truy cập. Sau ARC bạn không cần phải phát hành. Vì vậy, sử dụng mạnh mẽ. Đó là một đầu mối trực quan mà bạn không cần phải gọi là phát hành.

3

"giữ lại" bằng với "mạnh".

"mạnh" được sử dụng ví dụ:

@property (nonatomic, strong) NSString * someString; 

Và "__strong" được sử dụng ví dụ:

-(void) someMethod 
{ 
    __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; 
} 

trên Apple Documents. nói:

Thuộc tính tài sản

Từ khóa yếu và mạnh được giới thiệu như thuộc tính khai báo mới, như minh họa trong các ví dụ sau.

// The following declaration is a synonym for: @property(retain) MyClass *myObject; 
property(strong) MyClass *myObject; 

Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

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