Vì vậy, chỉ là một câu hỏi đơn giản, khi nào tôi nên sử dụng bản sao thay vì sử dụng giữ lại. Tôi đã cố gắng để nhìn từ internet nhưng không hoàn toàn nhận được nó. Vì vậy, ai đó có thể làm sáng tôi?Bản sao C và giữ lại mục tiêu
Trả lời
Bạn sẽ sử dụng copy
khi bạn muốn đảm bảo trạng thái của đối tượng.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
Tại thời điểm này b chỉ bị sai lầm bởi dòng thứ ba ở đó.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
Trong trường hợp này b là chuỗi ban đầu và không bị sửa đổi bởi dòng thứ 3.
Điều này áp dụng cho tất cả các loại có thể thay đổi.
Điều đáng chú ý là nhiều loại bất biến sẽ thực hiện bản sao bằng cách gọi -chính; Vì giá trị của chúng sẽ không bao giờ thay đổi, không có điểm nào trong việc có hai bản sao trong bộ nhớ. Điều đó nói rằng, thông tin không rõ ràng hơn, bạn nên luôn luôn mã như thể bạn không biết liệu một đối tượng cụ thể có thể thay đổi hay không. Chỉ vì bạn gõ thuộc tính của bạn là NSString không có nghĩa là ai đó sẽ không vượt qua NSMutableString cho nó (như minh họa ở trên.) – ipmcc
Sao chép hữu ích khi bạn không muốn giá trị bạn nhận được thay đổi mà bạn không biết. Ví dụ: nếu bạn có thuộc tính là NSString
và bạn dựa vào chuỗi đó không thay đổi sau khi được đặt thì bạn cần sử dụng bản sao. Nếu không, ai đó có thể chuyển cho bạn NSMutableString
và thay đổi giá trị sẽ lần lượt thay đổi giá trị cơ bản của NSString
của bạn. Điều tương tự cũng xảy ra với NSArray
và NSMutableArray
ngoại trừ sao chép trên một mảng chỉ sao chép tất cả các tham chiếu con trỏ tới một mảng mới nhưng sẽ ngăn các mục nhập bị xóa và thêm vào.
giữ lại: Nó được thực hiện trên đối tượng đã tạo và chỉ tăng số lượng tham chiếu.
sao chép - Nó tạo đối tượng mới và khi đối tượng mới được tạo giữ lại sẽ là 1. Hy vọng điều này có thể giúp bạn.
- 1. Điều gì được giữ lại trong mục tiêu-C?
- 2. Tự giữ lại trong khối Mục tiêu-C này?
- 3. xóa các bản sao khỏi mảng trong mục tiêu c
- 4. Mục tiêu-C và PhoneGap
- 5. mục tiêu cơ bản C biến khai
- 6. Xác định lại macro mục tiêu-C
- 7. Cú pháp mục tiêu-C cơ bản: "% @"?
- 8. Mục tiêu sở hữu C NSString * giữ lại đếm kỳ quặc
- 9. NSString @property, sử dụng bản sao thay vì giữ lại
- 10. Mục tiêu C NSStack và NSQueue?
- 11. Sự khác biệt giữa C++, mục tiêu-c và mục tiêu-C++ là gì?
- 12. Bản dịch số lớn của C# thành Mục tiêu C
- 13. Mục tiêu-C respondsToSelector
- 14. Khi nào sử dụng giữ lại và khi nào sử dụng bản sao
- 15. Cách thực hiện cuộc gọi lại trong mục tiêu-C
- 16. Mục tiêu-C Danh mục và iVar mới
- 17. ARC, Chặn và giữ lại chu kỳ
- 18. Phân tích tiêu đề mục tiêu-C
- 19. Mục tiêu xây dựng Android, bản sao, để chọn?
- 20. Tại sao addSubview lại không giữ lại chế độ xem?
- 21. Tài liệu tiêu chuẩn mục tiêu-C
- 22. Bạn nghĩ gì về mã này trong Mục tiêu-C làm tăng số lần giữ lại của thorugh và gọi mỗi lần lặp lại?
- 23. Trình xử lý gọi lại mục tiêu-C
- 24. Sự khác biệt b/w Mục tiêu C của bản thân và C++ của điều này?
- 25. Giữ lại lịch sử bản sao svn khi chuyển đổi sang git
- 26. Sao chép NSView trong ca cao/mục tiêu-c
- 27. C - cách bao gồm tiêu đề riêng được giữ trong thư mục riêng biệt
- 28. Mục tiêu-C: Tại sao chọn nil trước respondsToSelector :? đang
- 29. Tại sao giữ lại biến tĩnh?
- 30. Mã hóa chuỗi trong C# và Mục tiêu c
bản sao có thể có của [Thuộc tính NSString: sao chép hoặc giữ lại?] (Http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain) hoặc [Mục tiêu C Gán bản sao giữ lại] (http://stackoverflow.com/questions/4510913/) hoặc [Giữ lại bản sao của các đối tượng tự động phát hành] (http://stackoverflow.com/questions/6416963/) hoặc [Khi nào sử dụng giữ lại và khi nào sử dụng bản sao] (http: // stackoverflow .com/questions/4087208 /) hoặc [@property: Giữ lại hoặc sao chép?] (http://stackoverflow.com/questions/5616170/) hoặc [nhiều người khác] (http://stackoverflow.com/search?q= % 5Bobjc% 5D + bản sao + giữ lại) –
Trong câu hỏi bảo vệ, những người khác là tất cả cụ thể cho các loại tài sản, nhưng có, câu hỏi này đã được hỏi rất nhiều. –