我有一种情况,我希望能够维护一个可能都指向nil的指针数组.
Equipment *equipment[19];
Run Code Online (Sandbox Code Playgroud)
但是,我发现我不能将指针数组或双指针设置为对象的属性.
当我不能使用C风格的数组时,我的解决方法是使用NSArray对象.所以我尝试做类似以下的事情:
NSMutableArray *equipment = [NSMutableArray arrayWithCapacity: NUM_EQUIPSLOTS];
for (int i=0; i<NUM_EQUIPSLOTS; i++) {
[equipment setObject: nil atIndexedSubscript: i];
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是我有一个空指针数组,稍后会指向东西.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x246e012 0x1e4be7e 0x2421b6a 0x2421a20 0xebd02 0xde82b 0xc9d5a 0xcb6bd 0x4d525 0xc94fa 0xc8b6a 0xa18157 0xa18747 0xa1994b 0xa2acb5 0xa2bbeb 0xa1d698 0x3176df9 0x3176ad0 0x23e3bf5 0x23e3962 0x2414bb6 0x2413f44 0x2413e1b 0xa1917a 0xa1affc 0xc8526 0x1fa5)
libc++abi.dylib: terminate called throwing an exception
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用C风格的数组和单个对象轻松地完成这项工作.我宁愿这样做而不是像哑巴一样: …
我似乎无法覆盖以下方法,并创建了一个独立的示例,现在让我烦恼了几个小时.
它几乎肯定是愚蠢的,但我似乎无法覆盖swift类中的类方法,其中基类是Objective C,特别是返回类型是一个NSArray*.
我刚收到错误," Method does not override any method from its superclass"
所以我的失败如下所示:
但是如果将返回类型更改为像NSString这样简单的东西,它可以正常工作*
现在我已经Array<AnyObject>和其他几个人一起尝试过了,但是我对Swift语法仍然有点新鲜,所以我几乎肯定错过了一些明显的东西.
我有一个公式重新调整数组作为例子var Array = [a,s,d,s,f,g,g,h,e].我想要的是运行一个for循环或其他一些让我回来的选项a,s,d,f,g,h,e- 只有唯一的值.我怎么能用ios Swift做到这一点?
我有两个NSRr数组NSR(使用NSStringFromRect(NSRect)存储).有没有快速的方法来检查并查看数组中的项是否相等或我是否必须循环?因此,数组1中的第1项=数组2中的第1项等.
谢谢
我有一个NSArray,数字为{0,1,2,3}
计算阶乘4(数组的计数),我有24个可能的排列0,1,2,3
我想知道是否有办法计算所有这些可能的排列并将它们放在一个单独的数组中.
例如,给定上面的数字{0,1,2,3},得到的排列将是:
0123, 0132, 0213, 0231, 0312, 0321,
1023, 1032, 1203, 1230, 1302, 1320,
2013, 2031, 2103, 2130, 2301, 2310,
3012, 3021, 3102, 3120, 3201, 3210
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.非常感谢!
假设您有NSArray重复项@[1,2,3,1,1,2,4,5,6];
找到所有重复项; 这可以是伪代码.这是一个算法问题而不是基础框架(不使用NSSet)问题.
我在下面得到了一个测试代码.
(通过这个例子,我遇到了一个接口,如果没有保留就不能静态分配.)
通过这个代码块,我理解了真正保留的是什么.
我想确定是否会泄漏,我应该在其他地方发布它.我根本不想每次重新初始化阵列.并使其静止.(内存不利但速度有利)
我应该在某处释放这个保留的静态数组吗?它是一个安全的代码还是我完全删除静态和保留单词,并且只是使用arrayObjects方法通常使用init?那么你更喜欢我?
-(NSUInteger)getCoordYByX:(int)ax
{
NSUInteger ret_=-1;
static NSArray *coordsX=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
coordsX=[[NSArray arrayWithObjects:
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:170],
[NSNumber numberWithInt:190],
[NSNumber numberWithInt:210],
[NSNumber numberWithInt:350],
nil]retain];
/*it is more longer. cropped for test purposes*/
});
ret_=[[coordsX objectAtIndex:ax] unsignedIntegerValue];
return ret_;
Run Code Online (Sandbox Code Playgroud)
}
考虑到我有一个CFMutableArray使用以下函数调用创建的对象:
CFMutableArrayRef marray = CFArrayCreateMutable(kCFAllocatorDefault, 1, &kCFTypeArrayCallBacks);
Run Code Online (Sandbox Code Playgroud)
根据CFMutableArray文档,的第二个参数CFArrayCreateMutable,这被称为capacity是"可以由新的数组被包含的值的最大数量.该阵列开始空并能长到这个数值(它可以具有更小) .传递0指定最大容量不受限制.该值不得为负数."
但是,如果我向我的新数组附加多个值,它会不断增长.我的意思是,如果新数组已经有一个值并且我附加了一个新CFArrayAppendValue(marray, newValue)值,则存储该值并且数组计数变为2,超过其容量.
那么,为什么会这样呢?我误解了文档吗?
特别:
self.words = (NSMutableArray*)[self.text componentsSeparatedByString:@" "];
Run Code Online (Sandbox Code Playgroud)
只要有分隔符就可以正常工作.我看到该方法返回包含在NSArray中的原始字符串,如果没有的话.这个单元素NSArray固执地拒绝被强制转换为NSMutableArray.
但是,当我这样做时:
self.words = [NSMutableArray arrayWithArray:self.words];
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
这里有什么我想念的吗?从NSArray转换为NSMutableArray是不好的做法吗?
我使用NSApplication和NSWorkspace来获取正在运行的应用程序列表.
但它只给我管理员激活的应用程序,而不是后台运行的根进程.
我希望获得所有正在运行的进程的列表,并在新进程生成后立即更新该列表.
我不想使用NSTask和解析输出.
有没有解决这个问题?
NSArray * runningapps = [[NSWorkspace sharedWorkspace] runningApplications];
Run Code Online (Sandbox Code Playgroud) nsarray ×10
objective-c ×6
ios ×3
cocoa ×2
swift ×2
arrays ×1
c ×1
cocoa-touch ×1
combinations ×1
filter ×1
for-loop ×1
iphone ×1
macos ×1
memory-leaks ×1
nsworkspace ×1
null ×1
sorting ×1
static ×1
xcode ×1