2009-05-31 7 views

답변

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!  
} 
+0

나는 작전이 부탁하려고 생각하지 않는다,하지만 더는 "라벨의 문자열 레이블을 더 이상 알림을 보내는없이 변경됩니다, 그래서 우리는 왜 변경 가능한 객체의 값을 변경할 수 없습니다." 받아 들여진 대답을 보면 더 잘 이해할 것입니다. – guenis

+0

그래, 알았어, 이제 알 겠어. 나는이 페이지에 내가 마음에 대답 한 질문에 도착했다. 나는 나의 생각을 흐리게 만든다고 생각한다. 공정! 내 대답을 내려야합니까? – NHDaly

+0

나는 네가 네 대답을 쓰러 뜨릴 수 있음을 이해한다. (물론 네가 할 필요는 없다.) – guenis

관련 문제