2011-03-22 3 views
0

Objective-C는 정말 이상합니다. 시도해 볼 수는 없습니다 ... 시도 할 경우 NSstring이 손실됩니다. 그것을 재 할당하는 것 ... 다음은 내가 사용하는 방법입니다 .. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 그것은 당신이 '그 가치를 잃고'무슨 뜻인지 전혀 분명하지 않다,하지만 난 여기에 문제를 생각NSString에 문제가있어서 함수 매개 변수에 할당 한 후 값을 잃어 가고 있습니다

@interface PageViewController : UIViewController { 

    NSString *mystring; 
} 

- (void)viewDidLoad { 

    mystring=[ [NSString alloc] initWithString:@""]; 
} 

-(void) function_definition:(NSString *) param { 
............. 
    mystring=param; 
......... 
} 
+0

추신 : 나는 ...이 범위를 벗어나 SAIS 클래스의 또 다른 기능으로 – PartySoft

+0

를 그 값을 사용하려고하면 당신은 좀 더 추가해야 할 수 있습니다 암호; param의 값이 아닌 포인터 참조를 복사하고 있습니다. 어느 NSString을보고 그 값을 잃어 버리고 있습니까? 당신은 initWithString : param]을 수행해야합니다; param을 mystring으로 복사하고 싶다면. – Suroot

답변

2

는 가장 일반적으로, 당신은 속성으로이를 지정할 것 : 구현의 다음

@interface PageViewController : UIViewController { 

    NSString *mystring; 
} 

@property (nonatomic, retain) NSString *mystring; 

@synthesize mystring; 

- (void)dealloc { 
    [mystring release]; 
    [super dealloc]; 
} 

을 그리고 마지막으로, 어디에서나 구현에 사용하여 mystring에 값을 설정 다음 중 하나를

[self setMystring:@"something"]; 

또는

self.mystring = @"somethingelse"; 

새 문자열을 할당하려면 반드시 해제해야합니다. 속성을 사용하여 자동으로 유지됩니다.

self.mystring = [[[NSString alloc] initWithString:@"hello"] autorelease]; 

마지막으로, 함수의 :

-(void) function_definition:(NSString *) param { 
............. 
    self.mystring = param; 
......... 
} 
+0

일반적으로 NSString의 속성 정의에 retain 대신 copy를 사용하는 것이 일반적입니다. 따라서 그것은 다음과 같을 것입니다 : @property (nonatomic, copy) NSString * mystring; – Omar

0

.. 새로운 값의 할당에 무슨 일이 일어나고 메모리 관리 중 하나입니다. do some reading 코코아가 어떻게 처리하는지 알아야하지만이 경우에는 다음을 수행해야합니다.

-(void) function_definition:(NSString *) param { 
............. 
    if (mystring != param) { 
     [mystring release]; 
     mystring = [param retain]; 
    } 
......... 
} 
관련 문제