20

không xác định tôi đã tạo ra một @property của UIColor,ARC cấm tổng hợp một tài sản với quyền sở hữu hoặc lưu trữ

@property (nonatomic) UIColor *color; 

và sau đó tôi đã cố gắng để tổng hợp nó:

@synthesize color = _color; 

nhưng tôi nhận được một lỗi:

ARC forbids synthesizing a property of Objective-C object with unspecified ownership or storage attribute

Điều đó có nghĩa là gì?

Tất cả những gì tôi đang cố làm là tạo thuộc tính cho đối tượng UIColor thay đổi màu sắc.

+0

Bạn có thể phải khai báo và triển khai lớp học đầy đủ vì điều này có vẻ hợp lệ. Lưu trữ theo mặc định trong thuộc tính là mạnh, trừ khi nó là một khối mà bạn phải chỉ định nó theo cách thủ công là 'copy'. –

Trả lời

37

Change kê khai tài sản của mình để:

@property (nonatomic,strong) UIColor *color;

nên ARC mà biết điều đó nên được giữ lại. Điều này sẽ được biên dịch mà không có strong trước ARC nhưng sẽ nguy hiểm vì mặc định là assign và màu sắc sẽ được giải phóng trừ khi nó được giữ lại ở nơi khác.

Tôi rất muốn giới thiệu video WWDC2011 về ARC.

+8

Điều này là không cần thiết trừ khi tài sản là một khối trong trường hợp nó phải được đề cập rõ ràng là 'copy'. Vì vậy, vấn đề là cái gì khác. –

+0

@VikramRao, câu hỏi này là 2,5 tuổi. Vào thời điểm nó được yêu cầu, các thuộc tính tổng hợp được yêu cầu để khai báo lớp lưu trữ và mặc định là 'assign' – Brian

+1

@Brian Dù sao, sẽ tốt hơn nếu bạn cập nhật câu trả lời được chấp nhận, vì mọi người có thể nhìn thấy nó qua google. Những người không biết điều đó, có thể nghĩ rằng họ cần phải viết nó một cách rõ ràng. Đối với bây giờ lỗi này được hiển thị chủ yếu với các khối, mà cần phải được 'copy'. Các đối tượng theo mặc định 'strong', các kiểu nguyên thủy như' BOOL', 'NSInteger', vv -' gán' và không ai có thể thấy lỗi này với các đối tượng/kiểu nguyên thủy. – Vive

4

Bạn phải chỉ định bộ nhớ strong hoặc weak trong tuyên bố thuộc tính (bên cạnh nonatomic).

+0

Có phải đó là điều tôi đã luôn làm cho con trỏ đến các đối tượng không? –

+1

Có, bạn phải chỉ định cách chúng được quản lý bộ nhớ. – JoePasq

+1

@WilliamSham bạn không cần phải làm điều đó cho tất cả các con trỏ, chỉ cho tài sản. Các con trỏ trong phạm vi cục bộ là các tham chiếu mạnh mẽ theo mặc định, nhưng bạn có thể hướng dẫn ARC xử lý một con trỏ như một tham chiếu yếu bằng cách sử dụng __weak. – Kekoa

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