Nếu số nguyên không thể được ghi vào từ điển và sau đó vào một .plist, nhưng NSNumbers có thể tốt hơn khi sử dụng NSNumbers trong suốt ứng dụng, thay vì cần phải chuyển đổi mỗi lần lưu hoặc tải từ điển từ. plist?NSNumber vs Int
Trả lời
Như một sự tổng quát: Chỉ cần gắn bó với loại POD cho đến khi bạn cần sử dụng một đại diện dựa trên đối tượng, chẳng hạn như NSNumber
. Hiệu suất tốt hơn nhiều với POD, nhưng bạn sẽ cần NSNumber
trong một số trường hợp.
Trong một số trường hợp, nó có thể làm cho tinh thần để sử dụng NSNumber
thay vì - đây là điển hình khi bạn tái sử dụng một NSNumber
thường - điều này là để tránh làm cho một tấn trùng lặp NSNumber
s. Sự xuất hiện như vậy là thực tế hiếm khi vượt ra ngoài serialization và các giao diện objc chung (ràng buộc, máy biến áp, từ điển).
Cập nhật/Thông tin chi tiết: Thời gian chạy ObjC sẽ trong một số trường hợp, trên một số kiến trúc, và trên một số phiên bản hệ điều hành thay thế một tagged con trỏ đại diện NSNumber
s của loại hình cụ thể và tên miền. Mặc dù các đại diện nội bộ đã thay đổi kể từ ban đầu được viết một vài năm trở lại, đây là một giới thiệu tốt về chủ đề: http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in. Trường hợp này có thể được sử dụng, nó sẽ giúp bạn tiết kiệm từ các hoạt động chậm như phân bổ, khóa, và số lượng ref. Tuy nhiên, các con trỏ được gắn thẻ không thể đại diện cho mọi số và nó giới thiệu chi phí, vì vậy bạn vẫn nên ưu tiên các nội trang cơ bản trên NSNumber
làm mặc định. Con trỏ được gắn thẻ là một tối ưu hóa tuyệt vời nếu có, nhưng không cạnh tranh với nội trang khi bạn chỉ cần số .
Điều tuyệt vời là KVC hỗ trợ autoboxing, tức là chuyển đổi giữa các loại vô hướng và NSNumber, vì vậy có rất ít nhu cầu sử dụng NSNumber trong các thuộc tính. – DrMickeyLauer
Bạn có thể muốn sửa đổi điều này xem xét các tác động của thiết bị 64 bit. Đã thêm cập nhật – user
@user – justin
NSNumber là đối tượng được kế thừa từ đối tượng trình bao bọc NSValue.
int không phải là đối tượng.
nếu sử dụng NSNumber u có thể nhận được nhiều hơn và nhiều chức năng hơn để sử dụng với chúng.
NSNumber là một lớp học giúp bạn lưu trữ các loại số như đối tượng. Nó có các phương thức để chuyển đổi giữa các kiểu và các phương thức khác nhau để lấy ra một biểu diễn chuỗi của giá trị số của bạn. Nếu bạn sử dụng ngày biến kiểu NSNumber * theo cách bạn đã làm trong ví dụ của mình, bạn không sửa đổi giá trị trong ngày nhưng địa chỉ bộ nhớ của nó.
Tất cả đều tùy thuộc vào nhu cầu của bạn. Tuy nhiên, nếu API yêu cầu bạn sử dụng int, bạn nên sử dụng int. Nó yêu cầu bạn sử dụng NSNumber bạn nên sử dụng NSNumber.
Ví dụ, nếu bạn đang sử dụng một UISegmentedControl , và bạn muốn chọn một phân đoạn, sau đó,
[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];
- 1. int vs NSNumber vs NSInteger
- 2. int ** vs int [ROWS] [COLS]
- 3. cách chuyển đổi NSNumber thành int trong Objective-C
- 4. int * int vs (int * int) trong OCaml loại tổng
- 5. Giải thích về int? vs int
- 6. Biến lớp int int vs mảng
- 7. Java: Enum vs. Int
- 8. Uninitialized int vs Integer
- 9. System.Convert.ToInt vs (int)
- 10. Int32 vs Int64 vs Int trong C#
- 11. int vs size_t trên 64bit
- 12. kill -INT vs kill -TERM
- 13. ASP/VBScript - Int() vs CInt()
- 14. Int id vs id varchar
- 15. iOS Implicit chuyển đổi int để NSNumber không được phép với ARC
- 16. Chuyển đổi NSNumber để NSInteger
- 17. Loại khóa chính: int vs long
- 18. biến biến thành hàm int vs round()
- 19. int vs Integer so sánh Java
- 20. INT vs VARCHAR trong tìm kiếm
- 21. Hiệu quả: mảng char vs int mảng
- 22. So sánh Integer đối tượng vs int
- 23. Java - sử dụng AtomicInteger vs Static int
- 24. #define MY_INT VS const int MY_INT
- 25. Số học NSNumber
- 26. NSNumber từ CGFloat
- 27. NSNumber và NSTimeInterval
- 28. ràng buộc NSTextField với NSNumber
- 29. So sánh hai đối tượng NSNumber
- 30. insertNewObjectForEntityForName: inManagedObjectContext: return NSNumber bug?
Lưu ý rằng việc phân bổ bộ nhớ tốn kém. Bạn có thể muốn tạo lớp của riêng bạn tương tự như NSNumber có thể thay đổi được. –
Ưu tiên 'NSInteger' trên' int'. Điều này dễ di chuyển hơn trong các phiên bản khác nhau của OS X. – mouviciel
Bạn chỉ có thể thay thế một 'NSNumber' (một đối tượng) cho một' int' (một giá trị vô hướng ").Sẽ vô cùng khó xử khi giữ mọi số lượng trong một số 'NSNumber' và chuyển đổi từ/sang cho mỗi lần tính toán. Sử dụng 'NSInteger' thay vì' int', mặt khác, là một điều hợp lý để làm. –