Giả sử tôi nhận được một chuỗi C từ một số chức năng:Memory Management: NSString của stringWithCString: mã hóa:
char * mystring = SomeCFunction(...);
Và tôi sở hữu chuỗi này (tôi chịu trách nhiệm giải phóng nó khi tôi đang làm).
Nếu trong Objective-C, tôi tạo ra một NSString *
sử dụng:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
Tôi vẫn chịu trách nhiệm giải phóng chuỗi C gốc?
Tôi giả sử câu trả lời là có, nhưng tôi không thể tìm thấy câu trả lời cuối cùng trong tài liệu - và chức năng của phương pháp ngược lại (cStringUsingEncoding
), trong khi hợp lý, không cho tôi tạm dừng, vì nó xử lý cString giải phóng cho bạn.
Nếu câu trả lời là có, thì tôi cũng chịu trách nhiệm đảm bảo rằng tôi không giải phóng chuỗi c trước khi tôi hoàn thành việc sử dụng NSString *
hoặc chức năng sao chép chuỗi cho tôi? Tôi yêu cầu này bởi vì tài liệu cho stringWithCString
nói nó:
Trả về một chuỗi chứa các byte trong một mảng C nhất định, giải thích theo một mã hóa nhất định.
Điều gì vẫn khiến tôi tự hỏi liệu nó có thực sự sao chép các byte hay chỉ trỏ vào chúng trong nội bộ (và về cơ bản tôi chỉ làm một diễn viên).
Ah! Bạn thật tuyệt vời. Cảm ơn bạn! Tôi sẽ chấp nhận câu trả lời sau 6 phút còn lại trên bộ đếm giờ chấp nhận đã hết hạn. – Steve
Điều này nên có trên tài liệu –
@ AndréFratelli Tôi đề nghị bạn gửi một phản hồi (có một liên kết ở cuối mỗi trang của tài liệu trực tuyến) để Apple thêm điều này vào đó ;-) – AliSoftware