현재 위치 - 중국 분류 정보 발표 플랫폼 - 중고환승안내 - 정적 메소드와 동적 메소드의 차이점

정적 메소드와 동적 메소드의 차이점

동적 메소드는 객체에 의해 호출됩니다.

정적 메서드는 클래스에 의해 호출됩니다.

호출 메소드가 isa 포인터와 슈퍼 포인터를 통해 구현되기 때문입니다. 따라서 객체는 클래스 객체의 메서드만 호출할 수 있고, 클래스 객체는 메타클래스의 메서드를 호출할 수 있습니다.

C++에서는 클래스 메서드 앞에 static 키워드가 추가되면 해당 메서드를 정적 메서드라고 하고, 그렇지 않으면 인스턴스 메서드라고 합니다. 정적 메서드는 클래스가 소유하며 개체나 클래스를 통해 사용할 수 있습니다. 그러나 일반적으로 클래스 이름을 통해 사용하는 것이 좋습니다. 클래스가 정의되어 있으면 정적 메서드를 사용할 수 있고 클래스의 인스턴스를 만들 필요가 없기 때문입니다. 정적 메서드는 정적 변수만 호출할 수 있습니다.

정적 변수와 마찬가지로 정적 메소드는 해당 클래스의 객체가 아닌 클래스 자체에 속합니다. static으로 정의된 메서드는 클래스 이름 앞에 접두사를 붙여 호출할 수도 있고, 비정적 메서드처럼 클래스 개체를 통해 호출할 수도 있습니다.

인스턴스 메소드는 클래스의 인스턴스를 통해 사용해야 합니다. 인스턴스 메서드는 클래스의 정적 멤버뿐만 아니라 클래스의 비정적 멤버도 사용할 수 있습니다.

클래스가 로드되면 클래스의 정적 메서드와 정적 변수도 로드됩니다. 그러나 클래스의 정적 변수는 해당 클래스의 개체에만 고유하다는 사실, 즉 모든 개체가 공유하는 변수라는 사실에 특별한 주의를 기울여야 합니다. 따라서 정적 변수를 가능한 한 적게 사용하는 것이 좋습니다. 정적 메소드에서 내부 변수를 사용해 보십시오.

동적 메서드 호출을 소개하기에 앞서 먼저 메서드 호출의 본질이 무엇인지부터 알아보겠습니다. 런타임을 아는 친구들은 OC 언어가 컴파일 과정에서 C 언어로 변환된다는 사실을 알고 있으며, 메소드를 호출하는 모든 코드는 실제로 주로 objc_msgSend 함수로 변환되므로 OC 메소드 호출은 보다 정확하게 메시지 보내기라고 불러야 합니다.