문제

비 변이성 데이터 유형은 일단 생성되면 수정할 수 없다는 것을 읽었습니다. (예 : nsstring 또는 nsarray).

그러나 다른 객체 세트를 가리키기 위해 재직 할 수 있습니까?

그렇다면 릴리스를 사용하여 사용 사이에서 처음으로 할당을 해제합니까? 예 :

MyArray는 인터페이스에서 nsArray *myArray로, 비 원자/유지 속성을 유지합니다. 초기화 코드에서 다음과 같이 다양한 문자열로 설정되었습니다.

self.myArray = [myString componentsSeparatedByString:@","];

그러나 나중에 나는 다른 문자열 세트를 가리키기 위해 MyArray를 다시 시작하고 싶습니다.

self.myArray = [myOtherString componentsSeparatedByString:@","];

가능합니까? 감사...

도움이 되었습니까?

해결책

예, 당신은 nsarray를 다시 이용할 수 있습니다. 다음은 NSARRAY를 다시 시작하는 데 사용한 샘플 코드입니다.

NSString *keywords = @"FirstName|LastName|Address|PhoneNumber";
NSArray *arr = [keywords componentsSeparatedByString:@"|"];
NSLog(@"First Init - %@,%@,%@,%@",[arr objectAtIndex:0],[arr objectAtIndex:1],
                                  [arr objectAtIndex:2],[arr objectAtIndex:3]);
arr = nil;

keywords = @"First_Name|Last_Name|_Address|_PhoneNumber";
arr = [keywords componentsSeparatedByString:@"|"];
NSLog(@"Second Init - %@,%@,%@,%@",[arr objectAtIndex:0],[arr objectAtIndex:1],
                                   [arr objectAtIndex:2],[arr objectAtIndex:3]);

다른 팁

그것은 당신이 의미하는 바에 달려 있습니다 다시 시작하십시오. 당신은 할당 할 수 있습니다 또 다른 포인터가 일정하지 않기 때문에 포인터에 불변의 대상.

예시:

@interface MyObj : NSObject {
    NSString *name;                    // not needed in 64bit runtime AFAIK
}
@property(retain) NSString *name;      // sane people use copy instead of retain
                                       // whenever possible. Using retain can
                                       // lead to some hard to find errors.
@end

/* ... another file ... */

MyObj *theObject = [[[MyObj alloc] init] autorelease];

theObject.name = @"Peter";
NSString *oldName = theObject.name;

NSLog(@"%@", theObject.name);   // -> Peter
NSLog(@"%@", oldName);          // -> Peter

theObject.name = @"Martin";
NSLog(@"%@", theObject.name)    // -> Martin
NSLog(@"%@", oldName)           // -> Peter

위의 행동이 당신이 원하는 것이라면 괜찮습니다.

마지막 줄이 돌아 오기를 원한다면 남자 이름 당신은 어려움에 처해있다. 그것들은 끊임없는 현이며입니다 ~ 아니다 수정을 의미합니다. 정말로 원한다면 객체의 메모리를 직접 수정할 수는 있지만 이것은 위험합니다 권장하지 않습니다. 그러한 동작이 필요한 경우 변동성 객체를 사용하십시오.

물론 그들은 할 수 있습니다. 그 말을 말합니다 NSArray 불변은 해당 유형의 클래스의 속성을 변경할 수 없다는 것을 의미하지는 않습니다. 콘텐츠를 변경할 수는 없지만 새 콘텐츠를 할당 할 수 있습니다.

참조를 불가능하게 변경하려면 사용해야합니다. const 예어.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top