2012-10-25 1 views
0

다음 개체를 메서드에 전달해야 메서드 메서드를 수정 한 후에 수정 된 개체로 이동할 수 있습니다.메서드에서이 값으로 어떻게 작업 할 수 있습니까? Object C

AVMutableCompositionTrack *compositionVideoTrack[2]; 

이 현재처럼 전달 :

[self buildShow:&compositionVideoTrack]; 

buildshow 방법은 다음과 같습니다

-(void)buildShow:(AVMutableCompositionTrack**)videoTracks{ 
} 

나는이 컴파일러 경고를 얻고 있으며 현재 작동하지 않습니다 :

매개 변수에 'AVMutableCompositionTrack * __ strong (*) [2]'를 (를) 보내지 않는 호환되지 않는 포인터 유형 'AVMutableCompositionTrack * __ autoreleasing *'을 입력하십시오.

어떻게 작동합니까?

+0

절대적으로 필요한 경우가 아니면 참조로 전달하지 마십시오. Locke의 대답은 나머지 프레임 워크의 디자인 철학과 더 잘 어울립니다. – bbum

+0

내 계획은 메서드에 의해 수정 된 몇 가지 다른 개체를 가질 수 있으며 몇 번이나 메서드를 실행해야하므로 ref를 전달하면 필요한 부분을 완벽하게 처리 할 수 ​​있으므로 주석을 달아 주셔서 감사합니다! – box86rowh

+0

메서드에 의해 수정되는 몇 가지 다른 개체가있는 경우 다양한 개체를 포함하는 클래스를 만들고이를 관련시키는 논리를 제공하는 것이 좋습니다. 이것도 앞으로 리팩토링하기 쉬울 것입니다 (모든 단일 호출 사이트가 다중 arg-pass-by-reference-method로 변경되는 것이 아니라 클래스를 변경한다는 점에서). (iOS/Cocoa API를 살펴보면 매우 제한된 방식으로 참조로 전달됩니다). – bbum

답변

2

그냥 같이 전달할 :

[self buildShow:compositionVideoTrack]; 

이 같은 선언 할 때 :

AVMutableCompositionTrack * __autoreleasing compositionVideoTrack[2]; 

그것은 이미 포인터의 배열, 그래서 그것을 매개 변수의 유형과 호환 (AVMutableCompositionTrack**) .

방법 생성자 :

-(AVMutableCompositionTrack *)buildShow:(AVMutableCompositionTrack *)videoTracks { 
    // do something 
    return newVideoTracks; 
} 

그리고 당신은 속성 작업을하지 않는 한

+0

이 오류가 발생했습니다. 비 스칼라 개체의 주소를 씁니다. __autoreleasing 매개 변수를 사용하여 다시 쓰기를 수행합니다. – box86rowh

+0

@ box86rowh : 일부 정보는 [here] (http://stackoverflow.com/a/7422679/31158)에서 확인하십시오. 그것에 대해. –

+0

좋아요, 당신의 답을 조합하여 다음과 같이 내 객체를 선언했습니다 : AVMutableCompositionTrack * __autoreleasing compositionVideoTrack [2]; 답변에 해당 부분을 추가하고 답변으로 표시하겠습니다. – box86rowh

0

, 당신은 이런 식으로 작업을 수행한다고 (이 방법은 지금 같은 유형의 객체를 반환합니다) , 메서드 호출 :

newVideoTracks = [self buildShow:compositionVideoTrack]; 

속성을 사용하는 경우 매개 변수없이 void 메서드를 사용할 수 있습니다.

+0

여기에 게시하기 위해 내 질문을 단순화했습니다. 내 메소드가 여러 오브젝트를 승인해야 리턴이 작동하지 않습니다. – box86rowh

+0

항상 메서드에 여러 매개 변수를 전달할 수 있습니다.NSArrays 또는 C 코드보다 더 잘 작동하는 다른 기본 구성 요소를 사용하여 살펴볼 수 있습니다. – Adis

관련 문제