2011-08-16 40 views
16

Tôi đã thấy readwrite trên int, BOOL vv giống như nonatomic, gán.sự khác biệt giữa thuộc tính ghi đè và thuộc tính gán nonatomic là gì?

Tôi là một số điều nhầm lẫn về điều này. Tôi biết rằng trên các đối tượng không có nguồn gốc, chúng ta thường làm nonatomic, giữ lại.

+0

Xem thêm: [Atomic vs tính nonatomic] (http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties) – PengOne

+0

Xem thêm : Mục tiêu c 101 (giữ lại và gán) @ http://stackoverflow.com/questions/1380338/objective-c-101-retain-vs-assign-nsstring –

Trả lời

15

readwrite có nghĩa là cả getter và setter đều tồn tại; đối diện là readonly. Thông thường, lần duy nhất bạn khai báo một thuộc tính là readwrite là một lớp mở rộng cho một lớp mà giao diện công khai khai báo thuộc tính readonly - để nó công khai chỉ đọc, nhưng nội bộ bạn có thể nhận và thiết lập.

+2

câu trả lời rất hay. điều quan trọng là phải biết khi nào 'readwrite' thậm chí nên được sử dụng –

+0

@Chuck, setter của readwrite sẽ tương đương với setter của người được chỉ định hoặc giữ lại? –

+0

@VishalSingh: 'readwrite' không chỉ định quản lý bộ nhớ. Bạn cũng muốn * cũng * liệt kê một thuộc tính quản lý bộ nhớ cho thuộc tính. – Chuck

30

Dưới đây là câu trả lời ngắn:

atomic vs nonatomic chủ yếu đảm bảo rằng giá trị hoàn toàn được trả về từ thu khí tổng hợp và giá trị hoàn toàn được viết bởi setters tổng hợp

readwrite vs readonly xác định liệu (nguyên tử là mặc định.) một tài sản tổng hợp có một accessor tổng hợp hay không (readwrite có một setter và là mặc định, readonly không).

assign vs retain vs copy xác định cách accessors tổng hợp tương tác với các chương trình quản lý bộ nhớ Objective-C:

  • assign là mặc định và chỉ cần thực hiện một nhiệm vụ biến
  • retain xác định giá trị mới nên gửi -trả lời về chuyển nhượng và giá trị cũ được gửi -release
  • copy chỉ định giá trị mới phải được gửi-bản sao khi gán và giá trị cũ được gửi -release.
+0

+1 cảm ơn bạn rất nhiều vì điều này :) – swiftBoy

15

Sau khi đọc rất nhiều bài viết, SO bài viết và ứng dụng demo thực hiện để kiểm tra các thuộc tính tài sản Variable, tôi quyết định đặt tất cả các thông tin thuộc tính cùng

  1. nguyên tử // mặc định
  2. nonatomic
  3. strong = giữ lại // mặc định
  4. yếu = unsafe_unretained
  5. giữ lại
  6. assign // mặc định
  7. unsafe_unretained
  8. bản sao
  9. readonly
  10. readwrite // mặc định

nên dưới đây là link bài viết chi tiết nơi bạn có thể tìm thấy tất cả các thuộc tính nêu trên, mà bướng bỉnh sẽ giúp bạn. Rất cám ơn tất cả những người đưa ra câu trả lời hay nhất ở đây !!

Variable property attributes or Modifiers in iOS

  1. giữ lại = mạnh
    • nó được giữ lại, giá trị cũ được phát hành và nó được gán
    • giữ lại quy định các giá trị mới phải được gửi -retain về chuyển nhượng và giá trị cũ đã gửi -release
    • giữ lại là giống như mạnh mẽ.
    • táo nói nếu bạn viết giữ lại, nó sẽ tự động chuyển đổi/hoạt động như chỉ mạnh.
    • phương pháp như "alloc" bao gồm tiềm ẩn "giữ lại"

Ví dụ:

@property (nonatomic, retain) NSString *name; 

@synthesize name; 
  1. gán
    • assign là mặc định và chỉ thực hiện phân bổ biến số
    • gán là thuộc tính thuộc tính cho trình biên dịch biết cách tổng hợp việc thực thi setter của thuộc tính
    • Tôi sẽ sử dụng gán cho các đặc tính nguyên thủy C và yếu cho các tham chiếu yếu tới các đối tượng Objective-C.

Ví dụ:

@property (nonatomic, assign) NSString *address; 

@synthesize address; 
  1. readonly

    • tuyên bố tài sản của bạn như readonly bạn nói với trình biên dịch để không tạo ra phương pháp setter tự động.
    • Cho biết rằng thuộc tính là chỉ đọc.
    • Nếu bạn chỉ định chỉ đọc, chỉ cần có phương thức getter trong khối @implementation. Nếu bạn sử dụng chỉ thị @synthesize trong khối @implementation, chỉ có phương thức getter được tổng hợp. Hơn nữa, nếu bạn cố gắng gán một giá trị sử dụng cú pháp dấu chấm, bạn sẽ gặp lỗi trình biên dịch.

Ví dụ:

@property (nonatomic, readonly) NSString *name; 

@synthesize name; 
  1. readwrite
    • setter và getter tạo ra.
    • Cho biết rằng thuộc tính phải được coi là đã đọc/ghi.
    • Thuộc tính này là mặc định.
    • Cả hai phương thức getter và setter đều được yêu cầu trong khối @implementation. Nếu bạn sử dụng chỉ thị @synthesize trong việc thực hiện khối , các phương thức getter và setter được tổng hợp.

Ví dụ:

@property (nonatomic, readwrite) NSString *name; 

@synthesize name; 
+3

yếu! = Unsafe_unretained – jrturton

+0

@jrturton Vui lòng đọc [this] (http://stackoverflow.com/questions/9784762/strong-weak-retain-unsafe-unretained-assign) và [this] (http://stackoverflow.com/questions/11121839/differences-between-weak-and-unsafe-unretained) và sửa tôi Nếu tôi sai !! – swiftBoy

+2

Liên kết thứ hai nói lên tất cả. không an toàn_unretained không nil ra tham chiếu khi nó được deallocated, vì vậy bạn đang trái với một con trỏ lơ lửng, trong khi một tài sản yếu được thiết lập để nil khi đối tượng được deallocated. Pre-ios 4.3, yếu không được hỗ trợ. – jrturton

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