2014-05-10 2 views
-1

CATextLayerNSMutableAttributedString을 사용하려고합니다.CATextLayer와 NSMutableAttributedString의 사용 방법

일단 CATTELayer의 문자열 속성을 NSMutableAttributedString으로 설정하면 불변의 NSAttributedString으로 자동 대체됩니다.

클래스의 결과를 문자열 속성과 포인터를 설정하기 전과 후에 확인했습니다. NSConcreteMutableAttributedString을 CoreTextLayer에 건네고 setter가 호출되고 CATextLayer에 문자열 속성 클래스를 요청한 직후이 결과를 얻습니다. NSConcreteAttributedString. 또한 포인터는 앞과 뒤 (분명히) 다릅니다.

권리를 얻으려면 어떻게해야합니까?

답변

2

아무 일도 일어나지 않아 "옳은 것"이 없습니다. 설명서를보세요! string 속성은 다음과 같이 선언한다 :

당신이보고있는 정확히 무엇을 의미

@property(copy) id string

: 당신이 그것을 설정하면, 그것은 불변의 사본을합니다. 이는 신중한 것입니다. 그렇지 않은 경우 문자열이 레이어 뒤쪽으로 돌연변이 될 수 있습니다. 이렇게하면 모든 것을 버리게됩니다. 사실, 클래스에 문자열 속성이 있다면, 같은 방식으로 작동해야합니다.

문자열을 변경해야하는 경우 string 속성을 다시 설정하기 만하면됩니다. 현재 값을 기반으로 문자열을 변경해야 할 경우 string을 가져오고 mutableCopy을 만들고 변경 한 다음이를 의 Foundation에서 변경 불가능한 클래스 클러스터 쌍 중 하나로 설정하십시오. 난 당신이 실현 가정으로 클래스의

이름는 무관하다 : 그것은 클래스 클러스터, 그래서 (대신 인 NSMutableString의) NSConcreteMutableAttributedString 같은 개인 이름은 당신이 상관 없습니다. 변경 가능한 Foundation 클래스 인스턴스가 가변적인지 여부를 테스트하는 방법으로 클래스 이름을 사용해서는 안됩니다. 어떤 경우에는 객체에 변경 가능한 메소드에 응답하는지 여부를 묻습니다.

+0

여기 내 토론을 참조하십시오. http://www.apeth.com/iOSBook/ch10.html#_immutable_and_mutable – matt

+0

단지 내 문자열을 매우 자주 변경해야합니다. 그래서 새로운 NSMutableAttributedString을 반복해서 만들어야합니다. 나는 오브젝트 생성이 퍼포먼스에 미치는 영향을 줄이기를 희망했다. – Max

+1

오 flapdoodle. 여기에는 "성능"문제가 없습니다. 조기에 최적화하지 마십시오. 걱정할 가치가있는 것에 대해 걱정합니다. – matt