"Nonatomic" có nghĩa là gì trong mã này?
@property(nonatomic, retain) UITextField *theUsersName;
Sự khác biệt giữa nguyên tử và không nguyên tử là gì?
Cảm ơn
"Nonatomic" có nghĩa là gì trong mã này?
@property(nonatomic, retain) UITextField *theUsersName;
Sự khác biệt giữa nguyên tử và không nguyên tử là gì?
Cảm ơn
Câu trả lời:
Hãy xem Apple Docs .
Về cơ bản, nếu bạn nói nonatomic
và bạn tạo ra các bộ truy cập bằng cách sử dụng @synthesize
, thì nếu nhiều luồng cố gắng thay đổi / đọc thuộc tính cùng một lúc, điều xấu có thể xảy ra. Bạn có thể nhận được các giá trị được viết một phần hoặc các đối tượng được giải phóng / giữ lại quá mức, điều này có thể dễ dàng dẫn đến sự cố. (Tuy nhiên, điều này có khả năng nhanh hơn rất nhiều so với một công cụ truy cập nguyên tử.)
Nếu bạn sử dụng mặc định (nghĩa là atomic
, trước đây không có từ khóa nào cho việc này, nhưng hiện tại ), thì các @synthesize
phương thức d sử dụng khóa cấp đối tượng để đảm bảo rằng nhiều lần đọc / ghi vào một thuộc tính được nối tiếp. Như các tài liệu của Apple chỉ ra, điều này không có nghĩa là toàn bộ đối tượng là an toàn cho luồng , nhưng các thuộc tính riêng lẻ đọc / ghi là.
Tất nhiên, nếu bạn triển khai các bộ truy cập của riêng bạn thay vì sử dụng @synthesize
, tôi nghĩ các tuyên bố này không làm gì ngoài việc thể hiện ý định của bạn về việc liệu tài sản có được thực hiện theo cách an toàn không.
atomic
tránh được sự cố trong khi truy cập các thuộc tính riêng lẻ nhưng không đảm bảo rằng toàn bộ đối tượng (tức là truy cập các thuộc tính riêng biệt như tên và họ) sẽ làm Điều đúng đắn.
Sau khi đọc rất nhiều bài viết và bài đăng StackOverflow và đã tạo các ứng dụng demo để kiểm tra các thuộc tính thuộc tính Biến, tôi quyết định đặt tất cả các thông tin thuộc tính lại với nhau
Vì vậy, bên dưới là liên kết bài viết chi tiết nơi bạn có thể tìm thấy ở trên đã đề cập tất cả các thuộc tính, điều đó chắc chắn sẽ giúp bạn. Rất cám ơn tất cả những người đã đưa ra câu trả lời tốt nhất ở đây !!
Thí dụ :
@property (retain) NSString *name;
@synthesize name;
Thí dụ:
@property (nonatomic, retain) NSString *name;
@synthesize name;
Ngoài những gì đã được nói về tính linh hoạt, tính chất phi nguyên tử còn nhanh hơn các bộ truy cập nguyên tử. Đó không phải là điều bạn thường phải lo lắng, nhưng hãy ghi nhớ nó. Các thuộc tính được tạo ra Dữ liệu cốt lõi là một phần không vì lý do này.
Trong một chương trình đa luồng, một hoạt động nguyên tử có thể bị gián đoạn một phần thông qua, trong khi các hoạt động phi nguyên tử có thể.
Do đó, bạn nên sử dụng mutexes (hoặc một cái gì đó tương tự) nếu bạn có một hoạt động quan trọng không gây dị ứng mà bạn không muốn bị gián đoạn.
Nếu bạn chỉ định "nguyên tử", các hàm truy cập được tạo có một số mã bổ sung để bảo vệ chống lại các cập nhật đồng thời.
Bạn có thể có thể xử lý những thứ này bằng cách đọc bài viết dưới đây.
Giải thích với mục đích của nonatomic
nonatomic - Không phải chủ đề an toàn
nguyên tử - Chủ đề an toàn - Đây là thuộc tính mặc định.
Các "nguyên tử” có nghĩa rằng quyền truy cập vào tài sản là thread-safe. Trong khi 'nonatomic' là trái ngược với nó. Khi bạn khai báo một tài sản trong Objective-C bất động sản là nguyên tử theo mặc định để accessors tổng hợp cung cấp truy cập mạnh mẽ đến bất động sản Trong môi trường đa luồng, đó là giá trị được trả về từ getter hoặc được đặt qua setter luôn được truy xuất đầy đủ hoặc được đặt bất kể các luồng nào khác đang thực thi đồng thời. Nhưng nếu bạn khai báo thuộc tính là không tương tự như bên dưới
@property (nonatomic, retain) NSString *myString;
sau đó nó có nghĩa là một bộ truy cập tổng hợp cho một thuộc tính đối tượng chỉ đơn giản trả về giá trị trực tiếp. Tác dụng của thuộc tính nonatomic phụ thuộc vào môi trường. Theo mặc định, các bộ truy cập tổng hợp là nguyên tử. Vì vậy, nonatomic nhanh hơn đáng kể so với nguyên tử.
Một là cho nhiều chủ đề. Một không