2010-10-19 34 views
16

Chỉ cần một câu hỏi nhanh chóng nếu tôi có thể, tôi phải luôn (vì học obj-c) viết int tính như sau ...@property cho loại int?

@property(nonatomic, assign) int myValue; 

Tôi bây giờ nghĩ rằng đây có thể là quá mức cần thiết và tôi cũng có thể viết ...

@property int myValue; 

Chỉ cần tò mò, tôi biết rằng "gán" là hành vi mặc định và rằng "nonatomic" có thể fractionally nhanh hơn ...

mọi điều tốt đẹp

Gary

Trả lời

8

Vâng, câu hỏi về tuyên bố số nguyên tử là một trong những tách biệt cho dù bạn một cách rõ ràng khai báo các thuộc tính là mặc định. Trước đây sẽ phụ thuộc vào bản chất của mã của bạn - có khả năng là truy cập đa luồng mang tính nội dung đến tài sản không?

Về vấn đề này, nó chủ yếu là vấn đề về phong cách, nhưng nói chung tôi nghĩ bạn nên sai về mặt rõ ràng. Chính xác là bao nhiêu giây trong cuộc đời bạn phải trả thêm một vài lần nhấn phím?

2

Nonatomic tạo ra ít mã hơn và nhanh hơn một chút. Tôi đồng ý rằng nó rất dài dòng.

Nếu ứng dụng của bạn có thể sử dụng một vài chủ đề, bạn sẽ rất vui mừng đã đặt những vòng loại khiêu dâm khi bạn gặp phải lỗi lạ ...

33
@property(nonatomic, assign) int myValue; 

là không giống như

@property int myValue; 

Giá trị mặc định cho một tài sản là nguyên tử (không có từ khóa rõ ràng atomic). Vì vậy, ví dụ thứ hai là một thuộc tính nguyên tử. Đối với một thuộc tính kiểu nguyên thủy, tôi không biết nếu có bất kỳ khóa nào xảy ra, nhưng có thể một rào cản ghi bộ nhớ sẽ được giới thiệu (nghĩa là setter sẽ buộc giá trị được ghi lại vào bộ nhớ chính, thay vì chỉ vào bộ đệm). Do đó các tính chất nguyên tử chậm hơn đáng kể so với các thuộc tính phi nguyên tử. Tuy nhiên, như một phần nhỏ trong tổng thời gian thực hiện của chương trình, chúng vẫn có thể đại diện cho một tỷ lệ rất nhỏ. Bạn sẽ không biết cho đến khi bạn cấu hình mã của bạn.

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