Внешний framework Я использую в своем приложении theClass
, внутренняя структура которого непрозрачна.Objective-C: доступ к переменным экземпляра, объявленным как @private
Его переменные экземпляра не предназначены для прямого доступа.
@class TheClassPrivateVars;
@interface TheClass : NSObject
{
@private
TheClassPrivateVars *_theClassPriv;
}
@end
рамки общедоступный интерфейс не так полна, как это должно быть, и (на мой, я свой страх и риск) Я хочу, чтобы прочитать одну из частных переменных myClass
.
К счастью рамки поставляется с полным исходным кодом, так у меня есть доступ к определению TheClassPrivateVars
:
@interface TheClassPrivateVars : NSObject
{
int thePrivateInstanceVar; // I want to read this!
//
// other properties here...
//
}
@end
Я сделал заголовочный файл с указанным кодом и включить его только в источнике файл, в котором должен произойти «оскорбительный доступ».
theValue = instanceOfTheClass->_theClassPriv->thePrivateInstanceVar;
К сожалению _theClassPriv
объявлен @private
.
Есть ли способ обойти его без изменения исходного файла заголовка?
Не для этого нужны методы доступа? Или вы не можете редактировать код внешней структуры? Может быть, вы можете подклассы TheClass или добавить его как свойство в собственный класс? Чтение свойства myClass не должно быть слишком рискованным, если вы не начнете редактировать значение по адресу, на который указывает указатель. – Fnord23
для этого нет метода доступа, и я не хочу редактировать код фреймворка и перекомпилировать его. – Paolo
@Paolo: «Я не хочу редактировать код рамки и перекомпилировать его». Вам не нужно будет редактировать код рамки. Вам просто нужно определить категорию класса в * вашем * коде. – newacct