标签 NSThread 下的文章

swift线程间通讯

//
//  ViewController.swift
//  多线程
//
//  Created by admin on 16/2/17.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    var ticketsNumber = 20
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.performSelectorInBackground("getImage", withObject: nil)
    }
    func getImage()
    {
        // oc子线程里面的runloop默认不开启, 也就意味不会自动创建自动释放池, 子线程里面autorelease的对象 就会没有池子可放。 也就意味后面没办法进行释放。 造成内存泄露
        // 所以需要手动创建,好像不是的
        print(NSThread.currentThread())
        let data = NSData(contentsOfURL: NSURL(string: "http://f.hiphotos.baidu.com/image/pic/item/7aec54e736d12f2eec17b2b54bc2d562843568d0.jpg")!)
        // 更新ui要在主线程,所以这里把获取到的图片去主线程赋值
        //self.performSelectorOnMainThread(Selector("assignImage:"), withObject: UIImage(data: data!), waitUntilDone: false)
//        self.performSelector(Selector("assignImage:"), onThread: NSThread.mainThread(), withObject: UIImage(data: data!), waitUntilDone: false, modes: [NSRunLoopCommonModes])
        self.performSelector(Selector("assignImage:"), onThread: NSThread.mainThread(), withObject: UIImage(data: data!), waitUntilDone: false)

    }
    class Jin {
        deinit
        {
            print("对象销毁啦。。。")
        }
    }
    func assignImage(image:UIImage)
    {
        print(NSThread.currentThread())
        self.imageView.image = image
    }
}

NSThread使用以及基本属性

//
//  ViewController.swift
//  多线程
//
//  Created by admin on 16/2/17.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.threadStatus()
    }
    // 线程状态
    func threadStatus()
    {
        // 线程的状态有:就绪,运行,死亡,阻塞
        let thread = NSThread(target: self, selector: Selector("threadStatusRun:"), object: nil)

        // 放到可调度的线程池,等到被调度,就绪状态
        thread.start()
    }
    // 线程状态测试方法
    func threadStatusRun(parameter:AnyObject? = nil)
    {
        // 进入阻塞状态
        // 阻塞指定的时间
        //NSThread.sleepForTimeInterval(5)
        // 阻塞到指定的日期
        //NSThread.sleepUntilDate(NSDate(timeIntervalSinceNow: 5))
        // 退出,进入死亡状态
        NSThread.exit()
        print(parameter)
        for(var i = 1;i < 10000;i++)
        {
            // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
            print(NSThread.currentThread())
        }
    }
    // 线程属性
    func threadAttr()
    {
        let thread = NSThread(target: self, selector: Selector("run:"), object: "jin")
        // 优先级,一般不需要设置
        thread.threadPriority = 0.1
        // 名字
        thread.name = "jin"
        thread.start()
    }
    // 创建子进程的方式A和b比较方便(隐式创建),但是不能设置线程的详细的属性
    func createThreadA()
    {
        NSThread.detachNewThreadSelector(Selector("run:"), toTarget: self, withObject: nil)
    }
    func createThreadB()
    {
        self.performSelectorInBackground(Selector("run:"), withObject: nil)
    }
    // 可以设置线程的属性
    func createThreadC()
    {
        let thread = NSThread(target: self, selector: Selector("run:"), object: nil)
        thread.start()
    }
    // 测试方法
    func run(parameter:AnyObject? = nil)
    {
        print(parameter)
        for(var i = 1;i < 10000;i++)
        {
            // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
            print(NSThread.currentThread())
        }
    }
}