2012-06-16 4 views
1

전무 나는 코드차이는

의 다음 줄
[self performSelector:@selector(myMethod) withObject:self afterDelay:1.0]; 
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 
  1. 에 대해 궁금 한 뭐죠 위의 코드 두 줄 사이의 차이.
  2. 언제 개체를 nil으로 설정해야하며 언제 개체를 self으로 설정해야합니까?

대부분의 경우 나는 nil으로 설정할 개체를 발견했습니다.

+1

문서 읽기 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html –

+0

문서를 읽었습니다. 같은 맥락에서 두 줄의 코드를 모두 시도해 보았습니다. 그래서 차이점을 알고 싶었습니다. 나는 인터넷 검색을 할 수 없었습니다. –

+0

- (void) performSelector : (SEL) aSelector withObject : (id) anArgument afterDelay : (NSTimeInterval) delay anArgument : 메서드가 호출 될 때 메서드에 전달할 인수입니다. 메소드가 인수를 취하지 않으면 을 전달하십시오. –

답변

0

차이점은 선택기에 개체를 전달하는지 여부입니다. 선택기가 수행하는 모든 작업은 메소드를 설명하는 것입니다. 당신이 선택 (즉, 방법은) 당신이 배열, 사전, 또는 클래스 말에 통과하는 오브젝트로 작업 할 경우 지금

[self performSelector:@selector(myMethod:usingThis:) withObject:nil afterDelay:1.0]; 

:

[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 

는 다르다. withObject를 사용합니다. 다음과 같이 :

예와 같이 현재 클래스 (예 : 자기)에 대한 참조를 포함하여 아무 것도 전달할 수 없습니다.

0

첫 번째 예에서는 self가 호출 될 때 메서드에 전달할 인수로 self를 전달했습니다. 그러나 당신의 방법은 아무런 논쟁도하지 않으므로 불필요한 보풀입니다.

두 번째 예에서는 nil을 전달 했으므로 메서드에 존재하지 않는 인수가 nil으로 전달 된 다음 종료됩니다. 이것은 메소드가 인자를 가지지 않고`nil '이 없기 때문에 더 "효율적"입니다. 객체가 NULL과 동등한가요? 그런 다음에는 보풀이 덜 통과합니다. 여하튼 무시됩니다.

+0

Quoi? 이 방법이 논쟁을하지 않는다는 것은 무엇을 의미합니까? 내가 원하는 모든 방법을 사용할 수 있습니다. – CodaFi

+0

그게 무슨 뜻 이죠 U는 nil을 누른 다음 메서드 doesnot 어떤 인수를 가지고 있다면 그것은 그것을 사용할 수있는 인수를 가지고 가치를 전달 –

+0

-1로 내가 잘못 m을 의미합니다 –

8

나열된 예제에서는 myMethod 메서드에 인수가 없으므로 다른 동작이 발생하지 않습니다. 이것이 유용한 곳은 인수를 취하는 메소드가있을 때입니다.

NSNumber를 사용하고 squareRoot를 반환하는 squareRootMethod: 메서드를 선언했다고 가정 해 보겠습니다. 그런 다음 [self performSelector:@selector(squareRootMethod:) withObject:numberToRoot afterDelay:1.0]

같은 방법이 있습니다. 하나 이상의 인수를 사용하는 선택자에 대해서는 performSelector:withObject:withObject:과 같은 메소드가 있습니다.

+1

'withObject : withObject'? 어떤 서류를 볼 수 있을까요? – CodaFi

+4

[performSelector : withObject : withObject :] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/doc/uid/) 20000052-BBCGGCBE) –

+0

글쎄, 내가있을거야 ... – CodaFi

3

공지 이들 둘 사이의 차이 :

@selector(myMethod) 
@selector(myMethod:) 

첫 번째 두 번째 하나 개의 파라미터를 취하는 방법, 매개 변수를 고려하지 않은 방법이다. 사용중인 performSelector: 메서드의 withObject: 부분을 사용하면 메서드 호출시 메서드에 개체를 전달할 수 있습니다. 그러나 메소드가 매개 변수를 사용하지 않는 경우 사용되지 않으므로 중요하지 않습니다.