Когда я создаю CFArrayRef, используя CFArrayCreate, чтобы содержать некоторый CGWindowID;Я обнаружил, что созданный CFArrayRef имеет неупорядоченные элементы, что не ожидается.
вход представляет собой NSArray из NSNumbers, который содержит элементы с типом CGWindowID, я хочу преобразовать этот NSArray в CFArrayRef для дальнейшей обработки.
- (void)getArrayRefForWindowList:(NSArray<NSNumber *>)windowIdList
{
int windowCount = (int)windowIdList.count;
NSLog(@" to show input Count >>>>>>>> %d",windowCount);
CGWindowID windowIds[windowCount];
for(int i=0;i<windowCount;i++)
{
windowIds[i] = (CGWindowID)[windowIdList[i] intValue];
NSLog(@" to show orignial %d",windowIds[i]);
}
void *windowIdsParam = windowIds;
CFArrayRef windowArrayRef = CFArrayCreate(kCFAllocatorDefault, (const void **)windowIdsParam, (CFIndex)windowCount, nil);
for(int i=0;i<windowCount;i++)
{
CGWindowID windId = (CGWindowID)CFArrayGetValueAtIndex(windowArrayRef, i);
NSLog(@" to show destination %d",windId);
}
NSLog(@" to show outPut Count<<<<<<<<<%ld",(long)CFArrayGetCount(windowArrayRef));
}
Я ожидаю, что windIds будут помещены в windowArrayRef полностью и упорядоченно.Но на самом деле, некоторые из windId отсутствуют, ниже информация о NSLog.Вы можете увидеть, что 6405,6395,3919,199 отсутствует, а последние 4 элемента являются мусором.Может ли кто-нибудь помочь указать, в чем здесь ошибка?
to show input Count >>>>>>>> 8
to show orignial 6410
to show orignial 6405
to show orignial 6400
to show orignial 6395
to show orignial 5432
to show orignial 3919
to show orignial 200
to show orignial 199
to show destination 6410
to show destination 6400
to show destination 5432
to show destination 200
to show destination -272646672
to show destination 1349209287
to show destination -272646640
to show destination 1882819913
to show outPut Count<<<<<<<<< 8