2012-02-13 40 views
6

Tôi đang sử dụng chức năng CFSTR để tạo CFString từ chuỗi c cố định và tôi đang gọi hàm này rất thường xuyên trong Daemon của mình.Quản lý bộ nhớ CFSTR

Từ documentation:
Một giá trị được trả về bởi CFSTR có ngữ nghĩa sau đây:

  1. giá trị trở về từ CFSTR không phát hành bởi CFString-họ đảm bảo có giá trị cho đến khi chương trình kết thúc.
  2. Bạn có thể giữ lại và các giá trị phát hành được trả về từ CFSTR theo kiểu cân bằng, như bất kỳ CFString nào khác, nhưng bạn không bắt buộc phải làm như vậy.

Tôi có nên sử dụng giữ lại và giải phóng không?

Trả lời

11

Khi trạng thái tài liệu, CFSTR() chuỗi đã tạo vẫn hợp lệ cho đến khi chương trình kết thúc. Bạn có thể giải phóng chúng suốt cả ngày, nhưng chúng sẽ không thực sự được giải phóng. Vì lý do đó, không cần phải giữ lại/giải phóng chúng một cách rõ ràng. Đó là hợp lệ để giữ lại/giải phóng chúng bởi vì nếu không, bạn không thể vượt qua chúng xung quanh thông qua mã khác mà giữ lại/phát hành chúng (các phương pháp khung, vv). Đối xử với họ như bạn sẽ NSString literals được tạo ra bằng cách sử dụng @"", nghĩa là không cần phải giữ lại hoặc giải phóng chúng sau khi tạo, nhưng nếu bạn đang viết mã có thể lấy bất kỳ CFString nào, bạn cần tuân theo các quy tắc quản lý bộ nhớ thông thường, bao gồm sử dụng CFRetain()CFRelease().

+0

Tôi đang sử dụng tính năng này trong daemon của mình và gọi chức năng này rất thường xuyên vì vậy tôi có nên sử dụng một số chức năng khác không? –

+0

Bạn có quan tâm đến hiệu suất hoặc mức sử dụng bộ nhớ hay không? Dù sao, bạn không nên tối ưu hóa sớm. Nếu bạn đang gặp sự cố về hiệu suất hoặc sử dụng bộ nhớ, đó là thời gian để cấu hình mã và tìm ra cách cải thiện nó. –

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