Передайте метод объекта как SCNetworkReachabilityCallBack - PullRequest
1 голос
/ 19 января 2012

Можно ли как-нибудь передать объектный метод вместо функции функции, для которой в качестве аргумента требуется SCNetworkReachabilityCallBack?

Вот как определяется SCNetworkReachabilityCallBack:

typedef void (*SCNetworkReachabilityCallBack)   (
                        SCNetworkReachabilityRef    target,
                        SCNetworkReachabilityFlags  flags,
                        void                *info
                        );

Ответы [ 2 ]

0 голосов
/ 19 января 2012

Передайте блок, который отправляет сообщение, и затем ваш обратный вызов C выполнит этот блок!: D

По сути, обратный вызов C будет действовать как клейкий код.Поскольку IMP метода Objective C никогда не будет иметь тип, совместимый с обратным вызовом, вам всегда потребуется по крайней мере один уровень косвенного обращения, прежде чем вы попадете в рассылку сообщений Objective C.Если вам нужно нести больше состояния, чем просто объект, вам может помочь блок, но эта заглушка функции C никуда не денется.

0 голосов
/ 19 января 2012

Чтобы быть в безопасности, вы могли бы написать некоторый склеивающий код на C или C ++ и передать эту функцию, которая затем вызывала бы ваш метод объекта.

...