gpt4 book ai didi

ios - 可变大小的结构数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:11:07 24 4
gpt4 key购买 nike

我想制作一个结构数组,其大小仅在运行时已知

NSMutableArray *styleSettingsArray = [NSMutableArray array];

NSString *fontAlignmentAttribute = [element attributeNamed:@"TextAlignment"];
if(fontAlignmentAttribute)
{
CTTextAlignment alignment = [self getTextAlignment:fontAlignmentAttribute];
CTParagraphStyleSetting styleSetting = {kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment};
[styleSettingsArray addObject:[NSValue valueWithBytes:&styleSettings objCType:@encode(CTParagraphStyleSetting)]];
}

// other posible attributes

CTParagraphStyleRef paragraphStyleRef = CTParagraphStyleCreate((__bridge const CTParagraphStyleSetting *)(styleSettingsArray), [styleSettingsArray count]);
[dictionary setObject:(__bridge id)(paragraphStyleRef) forKey:(NSString*)kCTParagraphStyleAttributeName];
CFRelease(paragraphStyleRef);

此代码无效。

编辑:

CTParagraphStyleCreate 接受一个指向CTParagraphStyleSetting 数组的指针,例如

CTParagraphStyleSetting styleSettings[] = {
{ kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), alignment},
{...},
{...}
};

我如何分配这个数组,并在不知道其中有多少内容的情况下向其中添加内容? (我如何使用 malloc ?)

最佳答案

您不能以这种方式将 Objective-C 或 Core Foundation 集合与纯 C 数组混合使用。此外,正如您发现的那样,您需要将那些 CTParagraphStyleSetting structs 包装在 NSNumber 对象中以便存储它们。真是一团糟。

我将采用的方法是进行 2 遍;第一个决定你有多少属性,第二个决定生成这些属性。

  1. 遍历您的条件以找出有多少个属性
  2. 分配一个 C 数组(参见 malloc())。
  3. 遍历您的条件并将属性存储在动态数组中。
  4. 使用数组创建样式。
  5. 释放数组(参见 free())。

注意我已经编辑了这个答案,因为我之前的答案已经过时了。

关于ios - 可变大小的结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com