Как сделать объявление общим для обоих методов класса-> Цель C - PullRequest
0 голосов
/ 16 мая 2011

У меня есть класс с именем RSTimer, который имеет два метода с именами CreateTimer и KillTimer, которые используют один и тот же объект словаря. Я не смог объявить переменную как внутри интерфейса, так и внутри реализации. Он указывает в декларации и говорит, что это не константа.

-(BOOL)KillTimer:(unsigned short)wTimerId
{
    stRs232Timer* pEvent;
    BOOL bReturn=FALSE;
    CFDictionaryValueCallBacks cbs = {0,NULL,NULL,NULL,NULL};
    CFMutableDictionaryRef cfdict = CFDictionaryCreateMutableNULL,0,&kCFTypeDictionaryKeyCallBacks,&cbs);
      NSLock* theLock = [[NSLock alloc]init];
      if ([theLock tryLock]) {
        if (CFDictionaryContainsKey(cfdict,&wTimerId)) {
         free(pEvent);
         bReturn = TRUE;
        }
        [theLock unlock];
    }
return bReturn;
}
-(BOOL)CreateTimer:(RS232TimerInterface*)pStack withTimerId:(unsigned short)wTimerId withPeriod:(uint8_t)uPeriod withPersistentState:(BOOL)bPersistent
{

    CFDictionaryValueCallBacks cbs = {0,NULL,NULL,NULL,NULL};
    CFMutableDictionaryRef cfdict = CFDictionaryCreateMutable(NULL,0,&kCFTypeDictionaryKeyCallBacks,&cbs);
    CFNumberRef timerId = CFNumberCreate(NULL,kCFNumberShortType,&wTimerId);
    [self KillTimer:wTimerId];
    NSLock* theLock = [[NSLock alloc]init];
    if ([theLock tryLock]) {
         CFDictionarySetValue(cfdict,&timerId,pEvent);
        [theLock unlock];
    }

}

Я также пытался объявить это в методе 'init'. Как я могу сделать

CFDictionaryValueCallBacks cbs = {0,NULL,NULL,NULL,NULL};   
CFMutableDictionaryRef cfdict = CFDictionaryCreateMutable(NULL,0,&kCFTypeDictionaryKeyCallBacks,&cbs);

общее для обоих методов ..

1 Ответ

2 голосов
/ 16 мая 2011

Любой объект, на который ссылаются CreateTimer и KillTimer, должен быть объявлен в части интерфейса вашего класса (обычно это RSTimer.h, который должен быть импортирован файлом реализации).

Как это:

interface RSTimer {
 CFDictionaryValueCallBacks cbs;
 CFMutableDictionaryRef cfdict;
}
- (void)init;

Вам нужно определить свой метод init, чтобы инициализировать своих участников. (Вы не предоставили каких-либо подробностей о базовом классе RSTimer, поэтому я предполагаю, что NSObject)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...