UITextView
의 내부 구현은 NSString
을 사용하지만 내용을 자주 변경해야하는 경우 NSMutableString
을 사용하지 않는 이유는 무엇입니까?UITextView가 텍스트 속성에 문자열 대신 가변 문자열을 사용하는 이유는 무엇입니까?
2
A
답변
5
일반적인 코딩 관점에서 :
속성을 설정할 때 속성 설정 메서드가 호출됩니다. 그렇게하면 컨트롤이 속성이 변경된 시점을 알 수 있으므로 새 내용으로 컨트롤을 다시 그릴 수 있습니다.
속성이 변경 가능한 개체 인 경우 해당 내용을 변경할 수 있으며 컨트롤에서이 문제가 발생했다는 알림을받지 못하므로 컨트롤을 다시 그려야 함을 알 수 없습니다.
0
외부 클래스가 개인용 가변 변수에 액세스하는 것을 허용하는 대신 변경 불가능한 객체를 전달하는 일반적인 패턴입니다. NSArray 및 NSDictionary와 같은 콜렉션 클래스를 사용하면 똑같은 것을 볼 수 있습니다.
0
물론 그것이 가리키는 것을 변경할 수있는 이유가 없습니다! 멤버는 포인터 일 뿐이므로 원하는 경우 문자열을 NSMutableString
으로 직접 바꿀 수 있습니다.
많은 텍스트를보기에 추가하려는 경우보다 효율적인 방법 일 수 있습니다.
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[myTextView setText:[[NSMutableString alloc] init]];
}
return self;
}
그냥 여전히 @Guffa는 그의 대답에 설명 된대로 때문에, 그렇지 않으면 뷰 자체를 다시 그릴 알 수 없습니다하는의 setText를 호출해야합니다.
- (void)appendText:(NSString*)text
{
NSMutableString *dispText = (NSMutableString*)[myTextView text];
[dispText appendString:text];
[myTextView setText:dispText]; // notify myTextView of text change!
}
관련 문제
- 1. splice가 배열 대신 문자열을 반환하는 이유는 무엇입니까?
- 2. 문자열 대신 문자 배열을 보내려고하는 이유는 무엇입니까?
- 3. 함수 대신 템플릿을 사용하는 이유는 무엇입니까?
- 4. Singelton 패턴 대신 Zend_Registry를 사용하는 이유는 무엇입니까?
- 5. 누군가 C++ 대신 C를 사용하는 이유는 무엇입니까?
- 6. CompositionTarget.Rendering이 RenderingEventArgs 대신 EventArgs를 사용하는 이유는 무엇입니까?
- 7. strpos 대신 iconv_strpos를 사용하는 이유는 무엇입니까?
- 8. C++에서 C 문자열을 사용하는 이유는 무엇입니까?
- 9. C#/NET의 가변 문자열 편집
- 10. 로고 대신 이미지 대신 CSS를 사용하는 이유는 무엇입니까?
- 11. 쿼리 문자열 대신 세션을 사용하는 방법
- 12. XML 텍스트 노드 대신 속성에 텍스트 데이터 (문자열)를 저장하는 예제가 점점 더 많아졌습니다. 왜?
- 13. 텍스트 대신 이미지를 사용하는 Ajax.ActionLink
- 14. 아이폰에 가변 배열의 검색 하위 문자열
- 15. 가변 매크로 인수에 C++ 전 처리기 문자열을 사용하는 방법이 있습니까?
- 16. 문자열 대신 File.new 기호에 대한 인수가없는 이유는 무엇입니까?
- 17. 버튼을 사용하는 대신 목록을 사용하여 탐색 메뉴를 사용하는 이유는 무엇입니까?
- 18. 이벤트 대신 javabean 바운드 속성을 사용하는 이유는 무엇입니까?
- 19. ARM에서 문자열을 사용하는 방법은 무엇입니까?
- 20. 내용 대신 가변 구조체를 에코하기
- 21. 동등한 문자열에 대해 NSOrderedSame 대신 NSOrderedDescending을 사용하는 이유는 무엇입니까?
- 22. `request.method`가 (기호 대신) 문자열을 반환하는 이유는 무엇입니까?
- 23. Wpf는 name 속성에 문자열을 바인딩합니다.
- 24. 가변 길이로 구분 된 문자열
- 25. 주소 대신 문자열을 선언하십시오.
- 26. ODBC 가변 길이 문자열 배열을 저장하는 방법은 무엇입니까?
- 27. 텍스트 대신 * char *
- 28. 문자열을 객체의 속성에 하드 코딩하는 방법은 무엇입니까?
- 29. 개체 변수에있는 문자열을 동적 (C#) 문자열 속성에 할당합니다.
- 30. Visual Studio 2010에서 문자열 대신 문자열을 사용하도록 지정
나는 작전이 부탁하려고 생각하지 않는다,하지만 더는 "라벨의 문자열 레이블을 더 이상 알림을 보내는없이 변경됩니다, 그래서 우리는 왜 변경 가능한 객체의 값을 변경할 수 없습니다." 받아 들여진 대답을 보면 더 잘 이해할 것입니다. – guenis
그래, 알았어, 이제 알 겠어. 나는이 페이지에 내가 마음에 대답 한 질문에 도착했다. 나는 나의 생각을 흐리게 만든다고 생각한다. 공정! 내 대답을 내려야합니까? – NHDaly
나는 네가 네 대답을 쓰러 뜨릴 수 있음을 이해한다. (물론 네가 할 필요는 없다.) – guenis