2012-06-24 4 views
6

Hãy nói rằng tôi có đoạn mã này:Tôi có cần giải phóng CGColorSpaceRef trong ARC không?

CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB(); 

CGContextSetStrokeColorSpace(context, colorSpaceRGB); 
CGContextSetFillColorSpace(context, colorSpaceRGB); 

Sau đó tôi làm một số bản vẽ. Khi tôi hoàn thành, tôi có cần phải tự giải phóng colorSpaceRGB nếu tôi đang sử dụng ARC không? Như thế này:

CGColorSpaceRelease(colorSpaceRGB); 

Hoặc tôi không cần phải làm gì cả?

Cảm ơn :)

+0

câu trả lời này giải thích rõ tại sao và khi cần thiết phải phát hành bất kỳ đối tượng. Vui lòng kiểm tra: http://stackoverflow.com/a/21967681/2849443 –

Trả lời

10

Có. Theo tài liệu của Apple: Bởi vì chức năng CGColorSpaceRelease tương đương với CFRelease, ngoại trừ việc nó không gây ra lỗi nếu tham số cs là NULL. Và nếu bạn tạo, sao chép, hoặc giữ lại một đối tượng Core Foundation một cách rõ ràng, bạn có trách nhiệm giải phóng nó khi bạn không còn cần đến nó nữa (xem Hướng dẫn lập trình quản lý bộ nhớ cho Core Foundation).

3

Vâng, tôi tin như vậy, ngay cả trong ARC.

Bạn cần gọi số CGColorSpaceRelease theo tài liệu CGColorSpace Documentation.

0

Cập nhật cho Swift 4.0:

Điều này không còn cần thiết trong các phiên bản hiện tại của Swift.

CGColorSpaceRelease(colorSpace) 

dòng mã này hiện nay đưa ra thông điệp sau:

'CGColorSpaceRelease' không có sẵn: đối tượng cốt lõi Foundation sẽ được tự động bộ nhớ được quản lý