проблема с мемсетом айфона

Я определил структуру в моем заголовочном файле:

#import <UIKit/UIKit.h>    
typedef struct ORIGINAL_QUOTA_DATA_tag
{
    byte    exch;          
    byte    complex_stat;                   
    char    contract[8];    
    byte    status;         
    byte    type;        
}ORIGINAL_QUOTA_DATA;
@interface NetTestAppDelegate : NSObject <UIApplicationDelegate> {
    CFSocketRef _socket;
    CFDataRef address;
    ORIGINAL_QUOTA_DATA oQuota;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;

в моем файле .m:

    static void TCPServerConnectCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info){
memset(&oQuota, 0, sizeof(oQuota));
}

но оно изнашивается: введите здесь описание изображения


person Gaojian922188    schedule 10.10.2011    source источник
comment
Нам нужен контекст: где грань? Это внутри метода NetTestAppDelegate ? Это внутри функции C?   -  person DarkDust    schedule 10.10.2011
comment
Как вы хотите установить это значение с нулями в методе static, если эта переменная не static?   -  person Nekto    schedule 10.10.2011


Ответы (1)


Вы ссылаетесь на oQuota из функции C (она также статическая, но это не проблема). Ваша переменная oQuota находится только "в рамках" внутри реализации методов Objective-C для вашего NetTestAppDelegate:

void myCFunction()
{
    // oQuota cannot be referenced here.
}

@implementation NetTestAppDelegate
- (void)myObjectiveCMethod
{
   // oQuota is in scope, can reference it.
}
@end

Но что вы можете сделать, так это передать объект обратному вызову:

static void TCPServerConnectCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info){
    memset(
      &((NetTestAppDelegate *)info)->oQuota,
      0,
      sizeof(((NetTestAppDelegate *)info)->oQuota)
    );
    // Not sure whether the sizeof works, try it.
}

В вашем CFSocketContext вам нужно установить:

myCFSocketContext.info = self;
person DarkDust    schedule 10.10.2011