2015-01-28 6 views
1

우리는 SingletonClass라는 이름의 싱글 톤 클래스가 있다고 가정합니다. 우리가 다른 클래스에 아래 수행하여 그 방법을 액세스 할 때 우리는 지금싱글 톤 방법 (ARC)에 액세스 할 때 iOS 메모리 관리

[SingletonClass SharedInstance] 

하여 액세스 할 수 있다고 ClassOther

__weak singletonObj = [SingletonClass SharedInstance]; 
[singletonObj methodA]; 

연결되어 ClassOther의 객체가 해제 될 때 제대로 풀어 그래서 singletonObj 약한.

하지만 ClassOther 그것이 SingletonClass에 모든 것을 corrosponds을 해제 않습니다 발표됩니다

[SingletonClass SharedInstance] methodA]; 

을 시도하는 경우? 즉, 루프에 들어가서 SingletonClass에 액세스 할 때 ClassOther를 릴리스하지 않고 약하게 링크하지 않았습니까?

답변

1

SharedInstance는 소문자, sharedInstance 여야합니다.

일반적으로 허용되는 패턴 (정적 변수 및 dispatch_once 사용)으로 단일 객체를 만드는 경우 해당 객체는 한 번 만들어지고 영원히 메모리에 남아 있습니다. 이렇게하는 방법은 수십 번 응답되었으므로 검색 만하면됩니다.

싱글 톤 개체를 사용할 때 약하거나 강한 포인터 나 포인터를 사용하지 않아도 될 이유는 없습니다.

2

SingletonClass의 SharedInstance 메서드가 실제로 Singleton 패턴의 올바른 구현이라고 가정하면 SingletonClass가 SharedInstance를 통해 처음 초기화되면 해당 응용 프로그램이 살아있는 나머지 시간 동안 살아 있어야합니다.

싱글 톤 패턴의 전체 점은 공유되는 해당 객체의 단일 인스턴스를 갖는 것입니다. 같은 객체는 항상 SharedInstance 호출 할 때 액세스 할 수 있기 때문에이

__weak singletonObj = [SingletonClass SharedInstance]; 
[singletonObj methodA]; 

처럼 뭔가를 할 수 있도록

은 아무 소용이 없습니다. ClassOther이하는 것과하지 말아야 할 것은 중요하지 않습니다. SingletonClass의 인스턴스는 응용 프로그램이 메모리에서 지워질 때 SharedInstance가 처음 호출 된 시점부터 메모리에 남아 있어야합니다.