Objective c 使用NSMutableArray作为队列不工作
使用NSMutableArray作为队列时出现奇怪的问题 给定一个singleton对象SO、一个ViewController对象VC和一个NSMutableArray MA。 MA被用作SO接收的ID的队列,并通过将ID放入MA并发送VC处理的通知传递给VC。马失去了它所持有的东西,这是一个问题 与问题有关的步骤:Objective c 使用NSMutableArray作为队列不工作,objective-c,uiviewcontroller,nsmutablearray,Objective C,Uiviewcontroller,Nsmutablearray,使用NSMutableArray作为队列时出现奇怪的问题 给定一个singleton对象SO、一个ViewController对象VC和一个NSMutableArray MA。 MA被用作SO接收的ID的队列,并通过将ID放入MA并发送VC处理的通知传递给VC。马失去了它所持有的东西,这是一个问题 与问题有关的步骤: 启动Seque以加载视图 所以从服务器请求一个ID VC的viewDidLoad完成 所以block函数接收一个ID并将其放入MA中,然后向VC发送一个通知 VC接收通知并从MA检
有人有想法吗?问题是每次VC的viewDidLoad完成时都会调用NSNotificationCenter addObserver:(步骤3)。这导致通知处理程序被调用的次数与添加的次数相同,即使通知本身只发布了一次
以下是相关的:如何从可变数组中删除标识符?是谁干的?您是否100%确定处理的是同一个数组,或者它是否可能被重新实例化或复制?(在这些不同的调用中比较与数组本身关联的地址。)另外,您确定这都发生在主线程上吗?换句话说,如何同步非线程安全的NSMutableArray?(顺便说一句,如果我的理解是正确的,一个对象在添加项,另一个对象在删除项,我对此很警惕。我宁愿看到一个接口来协调这一点。)指向MA的指针是SO的一个属性,并且它在appDelegate的didFinishLaunchingWithOptions中被alloc'd和init'd。VC通知处理程序将使用removeObjectAtIndex:0删除收到的单个ID。指向MA的指针是SO的一个属性,它在appDelegate的didFinishLaunchingWithOptions中是alloc'd和init'd。我没有同步非线程安全的MA,但我只是在步骤4中通过SO block函数将ID放入MA中,在步骤4中发送通知,并在步骤5中检索。更正,从objectAtIndex为0的数组中获取对ID的引用,然后从removeObjectAtIndex为0的数组中清除。算法看起来正确,但由于您对它有问题,所以实现是错误的。试着看看NSNotificationCenter,它实际上实现了您想要重新发明的功能