2011-09-07 3 views
0

나는이 개 수업을 .m질문 프로그래밍 방식

// in .m file 
@synthesize myTextField = myTextField_ 

// in dealloc 
[myTextField_ release] 


// in viewDidLoad 
UITextField* tf = [[UITextField alloc] init] initWithFrame:CGRectMake(200,6,100,30)]; 
[nameTextField_ = tf]; 
[tf release] 

내 질문은 메모리 누수가 발생합니까? 아니면 그 충돌할까요? UITextField의 인스턴스를 만들 수있는 방법이 있습니까? 아마도

myTextField_ = [[UITextField alloc] init] initWithFrame:CGRectMake(200,6,100,30)]; 

이면 충분합니까?

감사합니다.

+0

하지 당신이 속성으로 텍스트 필드를 가지고 그것을 합성하는 이유. 당신은 텍스트 필드를 RootviewController 클래스 밖에서 접근 가능하게하고 싶습니까? 그것은 나에게 나쁜 생각처럼 들린다. 또한 코드는 여전히 속성없이 잘 작동하고 행을 합성합니다. – ophychius

+0

흥미로운 발언. 자습서 나는 재산으로 시작했고 그들의 모든 재료를 종합했다. 그게 내가 개인적으로 또는 아마 그렇게 할 것입니다 – bubbles

+0

속성으로 텍스트 필드를 가지고 괜찮지 만 클래스에서 사용되는 경우 속성 선언을 클래스 확장의 .m 파일로 이동하십시오. 시스템의 나머지 부분에 표시하려는 항목을 .h에 넣으십시오. – zaph

답변

3

simpliest 방법은 다음과 같이이 작업을 수행하는 것입니다

.H :

UITextField *myTextField; 
@property (nonatomic, retain) UITextField *myTextField; 

하는 .m 당신은 할당 된 가장 깨끗한에서 출시 한 인스턴스를해야합니다

@synthesize myTextField; 

- (void)viewDidLoad { 
    myTextField = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)]; 
} 

- (void)dealloc { 
    [myTextField release]; 
} 

이 텍스트 필드에 대한 참조는 항상있을 것입니다.

+1

이것은 재산과 합성에 대해 확실하지 않은 채로가는 길입니다. 텍스트 필드의 텍스트를 사용하려면 속성 (및 합성 된) 인 NSString에 저장하거나 TextField에서 직접 가져 오는 사용자 정의 getter를 만들 수 있습니다 – ophychius

1

예, 이것은 수행합니다

myTextField_ = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)]; 

당신은이를 사용할 수 있습니다

self.myTextField = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)] autorelease]; 

(직접은하지 않습니다 회원 myTextField_을 (사용하는 경우는, 보유 할 등록 정보를 사용하는 경우 자동으로) 보유). 또한 alloc은 retainCount를 1로 설정하여 결국 해제해야합니다 (dealloc 메서드의 경우 [myTextField_ release]; 또는 self.myTextField=nil;을 사용할 수 있음). 이것이 무엇

확실하지 (나는 어떤 컴파일 오류가 표시됩니다 믿는) : 당신이 직접 변수에 액세스하는 것처럼 [nameTextField_ = tf];

+0

'alloc'은 보유 수를 1로 설정하지 않을 것입니다. 이것은 오직'release'd이어야하는 객체를 반환합니다. 이것은'init'에 의해 반환 된 객체와 다른 * 객체 일 수 있습니다 ('init' 하나의 보유 수를 효과적으로 소비하고 리턴 된 오브젝트가 다른 경우에 다른 보유 수를 생성 함을 보증합니다. – bbum

+0

맞는지 확실하지 않은 경우 : http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/ alloc –

+0

문서가 잘못되었습니다 ( 제출). 싱글 톤 및/또는 보유 개수가 * 1이 아닌 다른 객체를 반환하는 + alloc 구현이 많이 있습니다 (오류가있는 워드 프로세서를 지적 해 주셔서 감사합니다). – bbum

1

당신은 [tf release]을해서는 안된다.

self. 표기법을 사용하여 액세스 할 경우 [tf retain]이라고 표시되고 tf을 릴리스해야합니다. 그래서 현재 버전에서 당신이 풀어 놓고있는 라인 외에는 괜찮습니다.

+0

좋은 지적. 고맙습니다! – bubbles

1

[nameTextField_ = tf];


변화 :

[자기 setMyTextField : TF]