20

와 속성을 합성 금지한다 :ARC는 내가하는 <code>@property</code><code>UIColor</code>의</p> <pre><code>@property (nonatomic) UIColor *color; </code></pre> <p>을 만든 다음 그것을 합성을 시도한 지정되지 않은 소유권 또는 저장

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

그 의미는 무엇입니까?

저는 색을 변경하는 UIColor 개체에 대한 속성을 만드는 것입니다.

+0

전체 클래스 선언 및 구현이 유효 할 수 있으므로 제공해야 할 수도 있습니다. 당신이 수동으로'copy'로 지정해야하는 블록이 아니라면, 속성에서의 저장소는 기본적으로 강력합니다. –

답변

37

변경에 귀하의 속성 선언 :

@property (nonatomic,strong) UIColor *color;

은 그래서 ARC는 유지되어야한다 알고있다. 이것은 ARC 앞에 strong없이 컴파일되었지만 기본값이 assign 이었기 때문에 위험 할 수 있었고 다른 곳에서 유지되지 않았다면 색상이 해제되었을 것입니다.

ARC에 대한 WWDC2011 비디오를 적극 권장합니다.

+8

속성이 블록 인 경우 명시 적으로 '복사'로 언급해야하는 경우가 아니면 필수 항목이 아닙니다. 그래서 문제는 다른 것입니다. –

+0

@VikramRao,이 질문은 2.5 년입니다. 그것이 부탁 받았을 때, 합성 속성은 저장 클래스를 선언하는 데 필요했고 기본값은'assign' – Brian

+1

@Brian이었습니다. 어쨌든 사람들이 Google을 통해 볼 수 있으므로 허용 된 답변을 업데이트하는 것이 좋을 것입니다. 그것들을 모르는 개발자들은 명시 적으로 작성해야한다고 생각할 수도 있습니다. 현재이 오류는 대부분 블록으로 표시되며'copy'가되어야합니다. 오브젝트는 기본적으로'강력한','BOOL','NSInteger' 등의 기본 타입 -'할당 '을 가지고 있으며 오브젝트/프리미티브 타입으로이 에러를 볼 수있는 사람은 없을 것입니다. – Vive

4

속성 선언 (nonatomic 옆)에 strong 또는 weak 저장소를 지정해야합니다.

+0

그것은 객체에 대한 포인터를 위해 항상해야 할 일입니까? –

+1

예, 메모리 관리 방법을 지정해야합니다. – JoePasq

+1

@WilliamSham 모든 포인터에 대해 속성을 수행 할 필요는 없습니다. 로컬 범위의 포인터는 기본적으로 강력한 참조이지만, __weak을 사용하여 포인터를 약한 참조로 처리하도록 ARC에 지시 할 수 있습니다. – Kekoa

관련 문제