2

테이블보기가 IBOutlet이며 기본적으로 XCode는 해당 속성을 weak이 아닌 strong으로 설정합니다. 때로는 "받은 메모리 경고"메시지가 나타납니다. 그래서 많은 속성을 strong에서 weak으로 변경하려고 시도했지만 프로세스에 영향을 미치지 않는 것처럼 보이고 모든 것이 원활하게 작동합니다. 콘센트를 약하게 설정해야합니까, 아니면 잘못 되었습니까?속성에 강함 또는 약한 속성을 사용하는 경우

그리고 가장 중요한 것은, 내가 에게 viewDidUnload 방법 nil 모든 속성 또는 단지 IBOutlet의를 설정해야합니까?

+0

가능한 복제본은 [ARC에서 IBOutlets를 강하게 또는 약하게해야합니까?] (http://stackoverflow.com/questions/7678469/should-iboutlets-be-strong -or-weak-under-arc) –

답변

1

Strong 속성은 nil에만 viewDidUnload으로 설정해야합니다. Weak 대상 객체가 할당 해제되면 속성이 자동으로 Nil로 설정됩니다.

IBOutlet은 요구 사항에 따라 strong 또는 weak으로 설정할 수 있습니다.

경고 문제에 대한 자세한 내용과 코드를 제공 할 수 있습니까? 외에도 조쉬에서 제공하는 링크에서

, SO이 주제와 관련된에 게시물이 많이 있습니다, 일부는 다음과 같습니다 :

weak or strong for IBOutlet and other

Objective-C declared @property attributes (nonatomic, copy, strong, weak)

이 좋은 자세한 설명은 여기에서 찾을 수 있습니다 : 이 주제에 대한

http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

애플의 문서 수 여기에 있습니다 : http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

+0

ARC를 사용하고 있으며 약한 poin을 자동으로 설정합니다. viewDidUnload 메소드에서 nil로 설정하지 않습니다. 나는 viewDidUnload에서 모든 포인터를 nil로 설정했지만 메모리 경고를 수신합니다. 나는 NSLog를 거기에 놓았지만 viewDidUnload를 호출하는 대신 메모리가 부족해졌으며 (NSLog가 표시되지 않았기 때문에) 아무 것도 놓지 않고 프로그램이 충돌합니다. 내가 어떻게해야합니까? 어떤 제안? – Milad

+0

사용중인 iOS 버전은 무엇입니까? 메모리 부족 경고에서'viewDidUnload'가 호출되지 않는 이유를 모르겠습니다. 여기에 몇 가지 코드를 게시하고 앱, 장면, 컨트롤러 등에 대해 조금 이야기 할 수 있습니까? 다음은 유용한 링크입니다. http://stackoverflow.com/questions/11050384/viewdidunload-not-called-for-alloc-init-initialized-viewcontroller-with-no-xib-f ** FYI ** :' iOS 6에서는 'viewDidUnload'가 더 이상 사용되지 않습니다. –

0

"부모가 자식 개체에 대한 참조를 가지고있을 때 강력한 참조를 사용해야합니다. 자식이 부모 객체에 대한 참조를 가질 때는 약한 참조를 사용해야합니다. "

일반적으로 약한 참조는 메모리 사이클을 다룰 때 사용됩니다. 강하게 사용하면 viewDidUnload에서 nil을 설정해야합니다. 메모리가 부족한 상황에서 예기치 못한 누수가 발생할 수 있습니다 .Arc가 대신 처리 할 것이므로 dealloc에서 해제하지 마십시오 대상 객체가 소멸되면 약한 대신에 치료가 필요하지 않습니다. 그 값은 자동으로 nil로 설정됩니다. 더 이상 매달리는 포인터가 없습니다.

관련 문제