2013-04-12 6 views
0

출력출력은 어떻게되어야합니까?

strString = değiştim 
wkString = NULL 

되어야하지만 아니다. 왜?

#import <Foundation/Foundation.h> 

@interface learnARC : NSObject { 
    NSString *strString, __weak *wkString; 
} 

@property (strong) NSString *strString; 
@property (weak) NSString *wkString; 

-(void) yaz; 

@end 

#import "learnARC.h" 

@implementation learnARC 

@synthesize wkString, strString; 

-(void) yaz { 
    NSString *anaString = @"anaString"; 
    strString = anaString; 
    wkString = anaString; 
    NSLog(@"\nstrString = %@\nwkString = %@",strString,wkString); 

    anaString = @"değiştim"; 
    NSLog(@"\nstrString = %@\nwkString = %@",strString,wkString); 
} 

@end 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     learnARC *lrnarc = [[learnARC alloc]init]; 
     [lrnarc yaz]; 
    } 
    return 0; 
} 
+0

출력되는 내용은 무엇입니까? – limon

+0

두 NSLog 문 모두 출력을 생성해야합니다. "strString = anaString \ n nwkString = anastring" ' –

답변

2

왜?

당신이 당신의 질문 대신 클래스 이름을 captalizing하고 있기 때문에 ...

는 진심으로, 약한 참조 NULL하지한다. 문자열에 대한 포인터 (문자열 @"anaString"에 대한 포인터)를 지정했습니다. 그리고 문자열 리터럴은 정적 저장 기간이 있기 때문에 프로그램의 수명 기간 동안 할당되지 않습니다. (당신이 속성과 혼동을 일으킬 수있는 변수라고 생각하십니까?)

+0

NSString의 강점과 약점의 차이점은 무엇입니까? – agulerer

+0

@agulerer "for NSString"이 아닙니다. 모든 개체에 대해. 하나는 할당 된 객체의 참조 횟수를 증가시키고 다른 객체는 증가시키지 않습니다. –

+1

(불변의 상수로 보이는 NSStrings는 NSUIntegerMax'에 가까운 보유 수를 가짐) – CodaFi