매개 변수가있는 메소드 이름에서 선택기 작성
SEL
현재 개체에서 가져 오는 코드 샘플이 있습니다 .
SEL callback = @selector(mymethod:parameter2);
그리고 나는 같은 방법이 있습니다
-(void)mymethod:(id)v1 parameter2;(NSString*)v2 {
}
이제 mymethod
다른 개체 로 이동해야합니다 myDelegate
.
나는 시도했다 :
SEL callback = @selector(myDelegate, mymethod:parameter2);
하지만 컴파일되지 않습니다.
SEL은 Objective-C에서 선택기를 나타내는 유형입니다. @selector () 키워드는 설명하는 SEL을 반환합니다. 함수 포인터가 아니며 어떤 종류의 객체 나 참조도 전달할 수 없습니다. 선택기 (메소드)의 각 변수에 대해 @selector에 대한 호출에서이를 나타내야합니다. 예를 들면 :
-(void)methodWithNoParameters;
SEL noParameterSelector = @selector(methodWithNoParameters);
-(void)methodWithOneParameter:(id)parameter;
SEL oneParameterSelector = @selector(methodWithOneParameter:); // notice the colon here
-(void)methodWIthTwoParameters:(id)parameterOne and:(id)parameterTwo;
SEL twoParameterSelector = @selector(methodWithTwoParameters:and:); // notice the parameter names are omitted
선택기는 일반적으로 콜백 중에 특정 객체에서 호출되어야하는 메서드를 지정하기 위해 위임 메서드와 콜백에 전달됩니다. 예를 들어 타이머를 만들 때 콜백 메서드는 구체적으로 다음과 같이 정의됩니다.
-(void)someMethod:(NSTimer*)timer;
따라서 타이머를 예약 할 때 @selector를 사용하여 객체에서 실제로 콜백을 담당 할 메서드를 지정합니다.
@implementation MyObject
-(void)myTimerCallback:(NSTimer*)timer
{
// do some computations
if( timerShouldEnd ) {
[timer invalidate];
}
}
@end
// ...
int main(int argc, const char **argv)
{
// do setup stuff
MyObject* obj = [[MyObject alloc] init];
SEL mySelector = @selector(myTimerCallback:);
[NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
// do some tear-down
return 0;
}
이 경우 개체 obj가 30 초마다 myTimerCallback으로 메시지를 받도록 지정합니다.
@selector ()에 매개 변수를 전달할 수 없습니다.
콜백을 구현하려는 것 같습니다. 이를 수행하는 가장 좋은 방법은 다음과 같습니다.
[object setCallbackObject:self withSelector:@selector(myMethod:)];
그런 다음 객체의 setCallbackObject : withSelector : 메소드에서 콜백 메소드를 호출 할 수 있습니다.
-(void)setCallbackObject:(id)anObject withSelector:(SEL)selector {
[anObject performSelector:selector];
}
선택자에 대해 이미 말한 것 외에도 NSInvocation 클래스를 살펴볼 수 있습니다.
An NSInvocation is an Objective-C message rendered static, that is, it is an action turned into an object. NSInvocation objects are used to store and forward messages between objects and between applications, primarily by NSTimer objects and the distributed objects system.
An NSInvocation object contains all the elements of an Objective-C message: a target, a selector, arguments, and the return value. Each of these elements can be set directly, and the return value is set automatically when the NSInvocation object is dispatched.
Keep in mind that while it's useful in certain situations, you don't use NSInvocation in a normal day of coding. If you're just trying to get two objects to talk to each other, consider defining an informal or formal delegate protocol, or passing a selector and target object as has already been mentioned.
ReferenceURL : https://stackoverflow.com/questions/297680/creating-a-selector-from-a-method-name-with-parameters
'developer tip' 카테고리의 다른 글
서브 플롯의 파이썬 xticks (0) | 2020.12.15 |
---|---|
SQL Server 2008 Express 데이터베이스에 모든 쿼리를 기록 하시겠습니까? (0) | 2020.12.15 |
컨트롤러 ASP.NET MVC에서 프로젝트 루트 경로 가져 오기? (0) | 2020.12.15 |
열 데이터를 잃지 않고 MySql 테이블의 열 위치를 변경하는 방법은 무엇입니까? (0) | 2020.12.14 |
Psycopg2 이미지를 찾을 수 없습니다. (0) | 2020.12.14 |