2014-02-07 2 views
1

NSObject 하위 클래스의 인스턴스 인 객체 (secondObject)가 있고 secondObject 내에 secondObject가 인스턴스화 된 객체 (firstObject)에 대한 참조를 가져 오려고합니다.Objective-C에서 두 번째 객체를 인스턴스화 한 객체에 대한 참조를 얻는 방법은 무엇입니까?

예 :

FirstObject.m (의 UIViewController의 서브 클래스)에서

SecondObject *secondObject = [[SecondObject alloc] init]; 

내가 viewControllers의 .parentViewController 속성과 비슷한 뭔가를 찾고 있었다

@implementation SecondObject 
    - (id) init { 
     self = [super init]; 
     NSLog(@"Parent object is of class: %@", [self.parent class]); 
    return self; 
    } 
    @end 

SecondObject.m

에서

나는 KeyValueCodin g,하지만 솔루션을 찾을 수 없습니다.

구현 된 임시 해결책은 secondObject.m에서 initWithParent : (id) 부모 메소드를 작성한 다음 인스턴스화시 self를 전달하는 것입니다. 그것을 할 수있는 더 간단한 방법이 있나요

SecondObject *secondObject = [[SecondObject alloc] initWithParent:self]; 

다음과 같이

@interface SecondObject() 
    @property id parent; 
    @end 

    @implementation SecondObject 
    - (id) initWithParent:(id)parent { 
     self = [super init]; 
     self.parent = parent; 
     NSLog(@"Parent object is of class: %@", [self.parent class]); 
     return self; 
    } 

    @end 

SecondObject.m

에서

그리고는 fisrtObject.m에서 개체를 인스턴스화?

RGDS는 ....

+2

당신이 생각해 낸 것은 적절한 방법입니다. 또는'init'을 호출 한 후에 속성을 설정하십시오. 어느 쪽이든 작동합니다. – rmaddy

답변

2

객체를 생성 한 객체에 포인터의 어떤 종류가없는 엔리케.

귀하의 initWithParent : 메소드가 작동하지만, 귀하의 객체가 작성자를 알아야하는 이유와 귀하가 달성하고자하는 것을 달성하는 더 좋은 방법이 없는지 생각할 수 있습니다.

또한 부모 속성을 약한 속성으로 만들거나 전체 유지 사이클을 만들려고 할 것입니다.

1

아마도 이어야합니다. 그 중 init 방법이 있지만 그 외에도별로 문제가 없습니다. 나는 이와 비슷한 일 (initWithDelegate: 등) 그러나

을 할 알고 아마도 작성하는 것이 현명 할 것입니다

... 지금까지 꽤 일반적입니다 @protocolparent 클래스, 및보다는을 준수 함 id을 사용하는 경우 프로토콜을 준수하는 개체가 필요합니다.

+0

정답입니다. 위임은 알아야 할 매우 중요한 디자인 패턴입니다. 여기에서 읽을 수 있습니다. https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1 –

+0

Thx nhgrif ... 프로젝트의 다른 부분에서 @protocols를 구현했습니다. 내가 원하는 것은 위임자 메서드와 속성에 액세스하기 위해 부모 클래스에서 인스턴스화 된 클래스로 ID 위임자를 이동하는 것과 같은 개념이기 때문에이 문제를 해결하기 위해 노력했습니다.이것은 CoreText (여러 articles-pages-columns)를 사용하고 꼬집음 동작을 사용하는 동적 글꼴 크기 조정을 포함하고 별도의 클래스 분기에 파서 및 페이지 열 작성기를 포함하는 프로젝트의 일부입니다. – eharo2