문제

나는 Objective-c에서 동적 타이핑에 대해 많은 이야기를 보았습니다. 그러나 나는 그것이 내가 생각하는 것에 대한 예를 보지 못했습니다.

두 개체 (하나는 할당되고 다른 하나는 풀려 난다)를 저글링 해야하는 일반적인 함수가 있다고 가정 해 봅시다. 둘 다 Class0에서 상속됩니다

당신이 무언가를 설명 할 것이라고 생각한다면 당신이 원하는 것을 해석하십시오!

클래스가 런타임에 선택된 경우, 인수 목록을 어떻게 처리합니까 (? 현재 자리 표시자가 있습니까?) 런타임까지 클래스의 클래스가 정의되지 않은 개체는 어떻게 할당됩니까?

-(void) juggle:(?*)objclass1:(?*)objclass2{

? temp = [? alloc] init];
objclass1 = temp;
[temp release];

[objclass2.view removefromsuperview];
[self.handle insertsubview:objclass1.view];

}
도움이 되었습니까?

해결책

나는 당신이 가지고있는 코드가 무엇을하려고하는지 전혀 모른다. 그것은 구문 적으로 유효하지 않으며, 견해를 조작하는 것은 당신의 질문과 아무 관련이 없다. 어쨌든, 당신이 일반적으로 codegen의 "void *"에 유형으로 캐스트되는 "ID"를 사용하는 유형을 실제로 모른다면. 메시지를받는 것으로 가정 한 특수 특성이 있으므로 알려지지 않은 메시지에 대한 컴파일러 경고를 트리거하지 않습니다.

클래스를 인스턴스화하려면 "클래스"객체를 보관하면됩니다. 목표 C에서 클래스의 모든 인스턴스는 클래스 객체 (레거시 런타임의 ISA 포인터)를 참조하며, 이는 메소드에도 응답합니다. 즉, 다음 코드에서는 다음과 같습니다.

NSArray *myObject = [[NSArray alloc] init];

Nsarray는 실제로 대상입니다. 따라서 동등한 코드 결과를 생성합니다.

Class myClass = [NSArray class];
NSArray *myObject = [[myClass alloc] init];

또는

Class myClass = NSClassFromString(@"NSArray");
NSArray *myObject = [[myClass alloc] init];

런타임으로 들어가서 전달한 이름의 클래스를 찾는 기능 NSClassFromString 함수를 사용합니다.

클래스 getter를 사용하는 경우 모든 개체는 클래스를 반환하므로 기존 객체와 동일한 클래스 인 객체를 다음과 같은 인스턴스화하려면 다음과 같습니다.

- (void) leakObjectWithSameClassAs:(id)object {
    [[[object class] alloc] init];
}

다른 팁

이것이 내가 지금 가지고있는 것입니다

- (void)flipfromv1tov2:(UIViewController*)v1:(NSString*)nib1:(UIViewController*)v2{

    if(v1 == nil)
    {
        UIViewController *newview = [[[v1 class] alloc] initWithNibName:nib1 bundle:nil];
        v1 = newview;
        [newview release];
    }
    [v2.view removeFromSuperview];
    [self.view insertSubview:v1.view atIndex:0];    
}

링크 문제가 있기 때문에 아직 확인할 수 없습니다 ...이 기능을 루트 컨트롤러에 추가했지만 어떤 이유로 든 함수가 암시 적으로 선언된다는 경고를받습니다. 기능 호출이 아무것도 연결되지 않기 때문에 빌드가 실패합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top