答问留言:关于NSOperation

1,operationQueue 里边应该可以同时添加多个operation吧?

是的,本来operationQueue的目的就是多线程管理,那多线程,可只是一个线程。

而且我们可以设置这个队列每次被处理的“操作”数量

	NSOperationQueue *aQ = [[NSOperationQueue alloc] init];
	[aQ setMaxConcurrentOperationCount:10];

这里的setMaxConcurrentOperationCount就是同时被处理的“操作数”,参数为整数int或NSInteger (两个是一样的,不记得的可以在我的博客里面搜索一下噢~)

2,那main函数应该怎么写?

main函数中其实只需要写你要在另外一个进程里面作的事情。比如对于我来说,我常常只是作一个简单的事情,那我会用NSInvocationOperation,NSOperation的简化版。比如说:

NSInvocationOperation *aOpt = [[NSInvocationOperation alloc]
		 initWithTarget:self selector:@selector(doSomeThing) object:nil];
 
- (void)doSomeThing
{
    //读取大量大延迟数据等等
    //可以使用performSelectorOnMainThread来将得来的数据返回到主线程
}

在doSomeThing函数里面,我可以从网上读取一些东西,但是读取是需要占用时间,而堵塞主线程的。而使用NSOperation这样使用就不会了。

而如果是NSOperation,虽然复杂了一些,又是做一个NSOperation的子类。其实main函数做得事情和doSomeThing是一抹一样的。只不过如果你制作这个子类,你对其操作的内容可以更多,可以制作更复杂的读取,载入操作等等,而且你可以重复使用这个类功能阿。再者,NSOperation也提供了对runtime操作的支持,不过那就太麻烦了,一般不大用的上。


最近麻烦事情真是太多了,而且还都不顺利,死的心都有阿。还好有这么多好朋友支持我,我这个博客也一点儿一点儿的有回复了…大家别那么冷漠,管我写的好还是不好,按东北话来说“吱一声”嘛~唉,我要加油阿!我还有那么多的事情没办到呢,怎么能放弃!他妈的!!!!!阿!!!!!!

6 Comments

  1. Ken 说:

    kingmtn您好,
    我也在学iphone开发,看了你很多文章,一边看一边惭愧,你学得很好,很深广,我学到了很多,谢谢你的无私奉献。加油!我支持你!

  2. 差点是只猪 说:

    哥们你的文章很好 我很喜欢能否加的QQ一起交流呢

  3. admin 说:

    我很少用QQ,不过你随时都可以给我发邮件 kingmtn@gmail.com 欢迎交流,尽快回复~

  4. Cynric 说:

    您好,我是一个iPhone开发的初学者,想请教您个问题.
    不知道您是否开发过iPhone网络相关的项目.我想知道一般iPhone是怎么处理网络通讯这方面的.
    以前用Flex开发的时候,使用过RO,或者AMF,非常的方便,IPhone不知道您是怎么处理的,可以指教一下嘛?

  5. admin 说:

    好像我遇到的情况都是自己写的, bonjour那个是本地通讯, 不过你可以试试一个开源的cocoa amf项目,但是不知道成熟不成熟

  6. 李林 说:

    谢谢,受用,今天看到,是不是有问题可以发邮件请你指教

Leave a Reply