如果你有NSMutableArray,你如何随机洗牌?
(我有自己的答案,发布在下面,但我是Cocoa的新手,我很想知道是否有更好的方法.)
更新:正如@Mukesh所述,从iOS 10+和macOS 10.12+开始,有一种-[NSMutableArray shuffledArray]方法可用于改组.有关详细信息,请参阅https://developer.apple.com/documentation/foundation/nsarray/1640855-shuffledarray?language=objc.(但请注意,这会创建一个新数组,而不是将元素移动到位.)
NSInvocation工作究竟如何?有一个很好的介绍吗?
我特别关注以下代码(来自Cocoa Programming for Mac OS X,3rd Edition)的工作原理,但是也可以独立于教程示例应用这些概念.代码:
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
NSLog(@"adding %@ to %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Insert Person"];
// Finally, add person to the array
[employees insertObject:p atIndex:index];
}
- (void)removeObjectFromEmployeesAtIndex:(int)index
{
Person *p = [employees objectAtIndex:index];
NSLog(@"removing %@ from %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager …Run Code Online (Sandbox Code Playgroud) 在Objective-C中,我知道块被认为是对象,所以我想知道是否可以将它们存储在数组中.这引出了一个问题,是阻塞第一类对象还是只是为了在对象之间传递它们而被视为对象?如果它们是第一类对象,那么它们不应该存储在数组中吗?