您的位置:首页 > 移动开发 > IOS开发

IOS_1,ios多线程使用:NSThread和NSOperation异步加载图片

2012-07-16 15:41 621 查看
先简单的认识下xcode和应用程序:
  ios开发基于需要使用苹果电脑的操作系统,对于没有接触过苹果这类奢侈货,每次都隔着商店玻璃流口水的我来说无疑有点小兴奋。善其事必先利其器,使用了几天的ios开发工具xcode后,分享下心得。
  这里使用xcode version4.2.
  点击xcode界面windows,选择welcome界面,可新建项目。
  选择singleviewapplication选项便可新建一个最简单的具有基本视图的项目。这里值得说的是ios的project和android还是一般的项目不一样,它的项目文件都会放在项目根目录下,项目中建group(就是package),只做逻辑分离,不做物理分离,会避免喝多因为文件路径造成的错误,而死掉珍贵的脑细胞,同时有逻辑分离又可以很方便的存放不同功能的代码。



  如上图所示,新建的文件根目录下有以下文件:AppDelegate.h,AppDelegate.m,ViewController.h,ViewController.m,ViewController.xib。
以上文件就是一个新建工程,xcode帮助我们生成的模板文件,程序可直接运行,但是手机界面上没有任何信息。
在AppDelegate.m程序中有一个main函数,是整个应用程序的入口,理所当然的是main函数,因为object-c就是在C的基础上发展的,是C的OOP实现,C的一切都可用于object-c。下图中,didFinishLaunchingWithOptions方法加载应用程序的windows对象,同时将viewcontroller初始化并加载到windows对象中。



一、简单的加载进度条nstimer使用



点击第一个button将加载第一个进度条,该功能的实现只需要使用一个方法便可搞定,nstimer定时器功能,使用一次需新建一个。使用方法如下



说明:第一个参数指调用间隔。也就是定时器触发时间间隔,第二个指上下文,第三个参数指选择器,也就是定时器每次触发时调用的方法,类似run task间的关系。
问题是showprogress方法如何和第一个button关联起来的,如何实现的监听。值得一提的是ios里面获取click事件的监听和android里面大不一样,android中通过声明控件对象,然后使用findviewbyid找到相应的控件,然后对其进行操作,同样可以进行监听器的实现等。ios里则完全不是这样,只需要划一条线,进行插座与变量的关联即可。.xib文件是布局控制文件个人觉得和delphi的可拖动的窗口文件比较像,界面布局都可以简单实现;又类似我们android文件里面的.xml布局文件。具体使用方法如下:
打开.xib文件,将控件拖进去后,点击edit视图中间的按钮



右键button按钮,在弹出的黑色框框中,选择touch up inside事件,划一条直线到相应的头文件中,在弹出的对话框中,输入方法名即可指定click点击事件,代码自动生成。



二、NSThread
NSThread对象是多线程的一种方式,很简单的使用,只需要在声明NSThread对象时指定需要异步执行的内容,最后在子线程执行完后继续执行即可。在子线程中通过
performSelectorOnMainThread告诉主线程需要执行何种方法,具体使用如下:

1、新建nsthread对象,指定startthread方法由子线程执行。



2、子线程中调用performSelectorOnMainThread方法返回主线程,通过changtvvalue方法可操作ui



三、使用NSOperation,异步加载网络图片
NSOperation相当于java里的runnable接口,就和java中一样使用多线程时需要实现这个runnable接口。在object-c中好像叫协议,觉得就是接口,差不多,只不过协议使用optional等关键字可以扩展一些功能,如,可以不必实现全部接口中方法等。

1、先写一个.h头文件进行接口定义:



2、对MyTask类进行实现,initWithImageURL的实现越看越像构造函数吧,就那么看待它吧!main方法是必须要实现的方法,是子线程的方法体,将图片数据进行加载后封装到NSDictionary对象中,NSDictionary和java中的map类似,最后调用performSelectorOnMainThread方法通知主线程,加载图片image。



3、在viewdidload中,初始化线程,并start。



4、最后取出数据,加载图片。



效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: