2011-12-26 2 views
0

방금 ​​NSMutableData 값의 인스턴스 변수를 설정해야하는 응용 프로그램에서 작업하고있었습니다. 이제 인스턴스 변수에 대한 프로퍼티를 만들었습니다. 즉, 내 프로그램이 자동으로 그것을 할당한다는 것을 의미합니다. 그러나 그때 나는 그것을 값으로 지정했다. 그러나 그것을 가져 가지 않고 있었지만 null을 유지하고 있었다. 나는 그것을 수동으로 할당했다가 갑자기 값을 받아 들였다. 그래서 지금은 내 질문에 속성에 대한 필요성과 왜 수동으로 내 인스턴스 변수를 할당해야합니까 속성을 설정할 수 있습니까?속성 및 할당 초기화를 사용할 때

미리 감사드립니다.

편집 : 내 코드 :

내 .H 파일에서 내가하는 .m 파일에

@interface FirstScreen : UIViewController{ 
NSMutableData* fetchedData; 

} 

@property(nonatomic, retain)NSMutableData*fetchedData; 

이 내가 가진 :

-(void) connectionDidFinishLoading:(NSURLConnection *)connection{ 
NSString* fetchedDataString= [[NSString alloc]initWithData:fetchedData  encoding:NSUTF8StringEncoding]; 
} 

을 지금은 구현하지 않는 경우 :

-(void)viewDidLoad{ 
self.fetchedData=[[NSMUtableData alloc]init]; 
} 

fetchedDataString 어떤 값이든. 그러나 할당 된 경우 값이 있습니다. 나는 인스턴스 변수를 할당 할 때와 그렇지 않을 때에 대해 생각하고있다.

+2

코드를 설명하는 대신 삽입하십시오. 문제를 지적하는 것이 더 쉽습니다. – Cyprian

답변

1

할당하지 않습니다. 모든 속성은 인스턴스 변수 &이 접근 자 메서드를 구현하도록 정의합니다.

"값 지정"은 할당 된 것으로 생각되는 NSMutableData 객체의 내용을 설정하려고한다는 것을 의미합니다.

0

That 's C 로컬 변수 또는 인스턴스 변수에 관계없이 모든 변수가 인 경우 true입니다. 변수에 대한 저장소를 선언하는 것이 한 가지입니다 (모든 속성을 선언하면됩니다). 그것에게 가치를주는 것은 또 다른 것입니다. 코드에서이 선언 :

NSMutableArray* arr; 

... 발생하지 않습니다 arr는 특정 값을 취합니다 (ARC 아래는 무기 호입니다, 이전에 전혀 아무것도 될 수 아크). 확실히 빈 가변 배열이 아닙니다! 그러나 그것은 당신이 속성을 선언 할 때 당신이하고있는 것과 정확히 유사합니다.

이것이 변수가 채택한 첫 번째 값인 경우이를 초기화라고합니다. 당신은 코드에서 말할 수 있습니다

NSMutableArray* arr = [NSMutableArray array]; 

하지만 코드가 실행되는 동안 일부 나중에 초기화 그래서 당신은 속성 선언에서 그렇게 할 수 없습니다. 전형적인 접근법은 지정된 초기화 프로그램에서 이것을 수행하는 것이므로 나중에 일어나는 일이 일어난다하더라도이 주소에 아주 일찍부터 실제 배열이있을 것입니다.

나는이 주제에 (아이폰 OS 프로그래밍)에 책을 작성했습니다, 당신은 발생한 문제를 다루는 장에서는 온라인으로 읽을 무료 :

http://www.apeth.com/iOSBook/ch03.html

+3

합성 된 것을 포함하여 모든 ivars가 MRR _ 및 _ ARC 둘 다에서 적절한 '0'값으로 초기화됩니다. 자동 변수 만 MRR에서 정의되지 않은 값을 갖습니다. –

+0

좋은 추가 - upvoted. – matt

1

이제도 작성 내 인스턴스 변수에 대한 속성, 즉 을 내 프로그램이 자동으로 할당하는 것을 의미합니다. 맞습니까?

틀린. 속성에 대한 접근자를 합성하는 경우 생성하지 않은 경우 ivar도 생성됩니다. 그러나 당신의 속성은 단지 포인터 일뿐입니다. 포인터가 가리키는 객체를 생성하고 설정할 때까지 아무 것도 가리 키지 않습니다 :

self.fetchedData = [[NSMutableData alloc] init]; 
+0

그렇다면 속성이없는 인터페이스와 속성이있는 ivar을 만드는 것의 차이점은 무엇입니까? – iJatrat

+0

'@ property' 지시자는 속성에 대해 접근 자 (적어도 getter와 setter가 속성이'readonly'가 아닌 경우)가 있음을 나타냅니다. – Caleb

+0

그러면 ivar = whatsoever와 self.ivar = whatsoever를 설정한다고 가정하면 어떤 차이가 있습니까? 같은 효과가 있다고 생각하니? 나와 함께 견뎌 주셔서 감사합니다! 아직도 코코아를 스스로 가르치려고 노력하고 있으며, 이것은 나를위한 혼란의 큰 포인트입니다. – iJatrat

관련 문제