ios开发——实用技术篇Swift篇&地址薄、短信、邮件
//返回按钮事件
@IBAction func backButtonClick()
{
self.navigationController?.popViewControllerAnimated(true)
}
//新增联系人
@IBAction func addPeople ()
{
//取得电话薄句柄
var error:Unmanaged<CFError>?
var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
var newContact:ABRecordRef! = ABPersonCreate().takeRetainedValue()
var success:Bool = false
//昵称
success = ABRecordSetValue(newContact, kABPersonNicknameProperty, "Gaven", &error)
println("设置昵称是否成功: \(success)")
//设置姓
success = ABRecordSetValue(newContact, kABPersonFirstNameProperty, "zhang", &error)
println("设置姓是否成功: \(success)")
//设置名
success = ABRecordSetValue(newContact, kABPersonLastNameProperty, "wu", &error)
println("设置名是否成功:\(success)")
//添加电话
let tmpMutableMultiPhones:ABMutableMultiValue = ABMultiValueCreateMutable(
ABPropertyType(kABStringPropertyType)).takeRetainedValue()
success = ABMultiValueAddValueAndLabel(tmpMutableMultiPhones, ", "companyPhone", nil);
println("设置电话标题是否成功:\(success)")
success = ABRecordSetValue(newContact, kABPersonPhoneProperty, tmpMutableMultiPhones, nil)
println("设置电话是否成功:\(success)")
//添加邮箱
let addr:ABMutableMultiValue = ABMultiValueCreateMutable(
ABPropertyType(kABStringPropertyType)).takeRetainedValue()
ABMultiValueAddValueAndLabel(addr, "185@leadingdo.com", "companyEmail", nil)
println("设置邮箱标题是否成功:\(success)")
ABRecordSetValue(newContact, kABPersonEmailProperty, addr, nil)
println("设置邮箱是否成功:\(success)")
//保存记录
success = ABAddressBookAddRecord(addressBook, newContact, &error)
println("保存记录是否成功:? \(success)")
//保存数据库
success = ABAddressBookSave(addressBook, &error)
println("修改数据库是否成功: \(success)")
}
//删除联系人
@IBAction func deletePeople()
{
//定义错误标记
var error:Unmanaged<CFError>?
//取得电话薄句柄
var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
//读取通讯录
let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined {
// Need to ask for authorization
var authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create()
var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in
if success {
ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
dispatch_semaphore_signal(authorizedSingal)
}
}
ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization)
dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER)
}
var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
//遍历通讯录
for contact in sysContacts {
var currentContact:Dictionary = [String:String]()
// 姓
// var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
println("姓:\(firstName)")
// 名
// var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
println("名:\(lastName)")
var success:Bool = false
if firstName == "zhang" && lastName == "wu"
{
success = ABAddressBookRemoveRecord(addressBook, contact, nil);
println("删除是否成功: \(success)")
}
//保存数据库
success = ABAddressBookSave(addressBook, &error)
println("修改数据库是否成功: \(success)")
}
}
//代码获取地址薄
@IBAction func codeToAddressButtonClick()
{
//定义错误标记
var error:Unmanaged<CFError>?
//取得电话薄句柄
var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
//发出授权信息,界面会弹出提示窗口
let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
//获取电话薄
if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined {
// Need to ask for authorization
var authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create()
var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in
if success {
//获取的联系人信息数组
var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
//循环读取联系人
for contact in sysContacts {
var currentContact:Dictionary = [String:String]()
/*
部分单值属性
*/
// 姓
// var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
println("姓:\(firstName)")
// 名
// var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
println("名:\(lastName)")
// 昵称
// var nikename = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var nikename = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as! String? ?? ""
println("昵称:\(nikename)")
// 公司(组织)
// var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as! String? ?? ""
println("公司(组织):\(organization)")
// 职位
// var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as! String? ?? ""
println("职位:\(jobTitle)")
// 部门
// var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as! String? ?? ""
println("部门:\(department)")
//备注
// var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as! String? ?? ""
println("备注:\(note)")
/*
部分多值属性
*/
// 电话
var propertyValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonPhoneProperty)?.takeRetainedValue()
if propertyValues != nil {
..< ABMultiValueGetCount(propertyValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(propertyValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(propertyValues, i)
var phone = value.takeRetainedValue() as? String ?? ""
println("\(label):\(phone)");
}
}
// E-mail
var emailValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonEmailProperty)?.takeRetainedValue()
if emailValues != nil {
..< ABMultiValueGetCount(emailValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(emailValues, i)
var email = value.takeRetainedValue() as? String ?? ""
println("\(label):\(email)");
}
}
// 地址
var addressValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonAddressProperty)?.takeRetainedValue()
if addressValues != nil {
..< ABMultiValueGetCount(addressValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(addressValues, i).takeRetainedValue() as String
// var value = ABMultiValueCopyValueAtIndex(addressValues, i)
// var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary
//
// var _Country = addrNSDict.valueForKey(kABPersonAddressCountryKey) as? String ?? ""
// var _State = addrNSDict.valueForKey(kABPersonAddressStateKey) as? String ?? ""
// var _City = addrNSDict.valueForKey(kABPersonAddressCityKey) as? String ?? ""
// var _Street = addrNSDict.valueForKey(kABPersonAddressStreetKey) as? String ?? ""
// var _Contrycode = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey) as? String ?? ""
//2015年5月2号修改
var value = ABMultiValueCopyValueAtIndex(addressValues, i)
var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
var _Country = addrNSDict.valueForKey(kABPersonAddressCountryKey as String) as? String ?? ""
var _State = addrNSDict.valueForKey(kABPersonAddressStateKey as String) as? String ?? ""
var _City = addrNSDict.valueForKey(kABPersonAddressCityKey as String) as? String ?? ""
var _Street = addrNSDict.valueForKey(kABPersonAddressStreetKey as String) as? String ?? ""
var _Contrycode = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey as String) as? String ?? ""
//或
// var _Country = ""
// var _State = ""
// var _City = ""
// var _Street = ""
// var _Contrycode = ""
//
// if let value:String = addrNSDict.valueForKey(kABPersonAddressCountryKey as String) as? String
// {
// _Country = value
// }
//
// if let value:String = addrNSDict.valueForKey(kABPersonAddressStateKey as String) as? String
// {
// _State = value
// }
//
// if let value:String = addrNSDict.valueForKey(kABPersonAddressCityKey as String) as? String
// {
// _City = value
// }
//
// if let value:String = addrNSDict.valueForKey(kABPersonAddressStreetKey as String) as? String
// {
// _Street = value
// }
//
// if let value:String = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey as String) as? String
// {
// _Contrycode = value
// }
println("\(label)==_Country:\(_Country) _State:\(_State) _City:\(_City) _Street:\(_Street) _Contrycode:\(_Contrycode)");
}
}
// 纪念日
var dateValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonDateProperty)?.takeRetainedValue()
if dateValues != nil {
..< ABMultiValueGetCount(dateValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(dateValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(dateValues, i)
var date = (value.takeRetainedValue() as? NSDate)?.description
println("\(label):\(date)");
}
}
// URL
var urlValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonURLProperty)?.takeRetainedValue()
if urlValues != nil {
..< ABMultiValueGetCount(urlValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(urlValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(urlValues, i)
var url = value.takeRetainedValue() as? String ?? ""
println("\(label):\(url)");
}
}
// SNS
var snsValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonSocialProfileProperty)?.takeRetainedValue()
if snsValues != nil {
..< ABMultiValueGetCount(snsValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(snsValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(snsValues, i)
// var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary
// var _Username = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey) as? String ?? ""
// var _URL = snsNSDict.valueForKey(kABPersonSocialProfileURLKey) as? String ?? ""
// var _Serves = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey) as? String ?? ""
//2015年5月2后修改
var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
var _Username = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey as String) as? String ?? ""
var _URL = snsNSDict.valueForKey(kABPersonSocialProfileURLKey as String) as? String ?? ""
var _Serves = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey as String) as? String ?? ""
println("\(label)==_Username:\(_Username) _URL:\(_URL) _Serves:\(_Serves)");
}
}
// IM
var imValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonInstantMessageProperty)?.takeRetainedValue()
if imValues != nil {
..< ABMultiValueGetCount(imValues)
{
var label:String = ABMultiValueCopyLabelAtIndex(imValues, i).takeRetainedValue() as String
var value = ABMultiValueCopyValueAtIndex(imValues, i)
// var imNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary
// var _Serves = imNSDict.valueForKey(kABPersonInstantMessageServiceKey) as? String ?? ""
// var _Username = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey) as? String ?? ""
//2015年5月2后修改
var imNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
var _Serves = imNSDict.valueForKey(kABPersonInstantMessageServiceKey as String) as? String ?? ""
var _Username = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey as String) as? String ?? ""
println("\(label)==_Serves:\(_Serves) _Username:\(_Username)");
}
}
}
dispatch_semaphore_signal(authorizedSingal)
}
}
ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization)
dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER)
}
}
//UI打开地址薄
@IBAction func uiToAddressButtonClick()
{
var picker = ABPeoplePickerNavigationController()
picker.peoplePickerDelegate = self
self.presentViewController(picker, animated: true, completion: { () -> Void in
})
}
// MARK: - ABPeoplePickerNavigationControllerDelegate
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!)
{
// 姓
// var firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
println("选中人的姓:\(firstName)")
// 名
// var lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? ""
//2015年5月2号修改
var lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
println("选中人的名:\(lastName)")
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier)
{
}
func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController!)
{
//取消
peoplePicker.dismissViewControllerAnimated(true, completion: { () -> Void in
})
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!) -> Bool
{
return true
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) -> Bool
{
return true
}
//发短信
// 添加MessageUI.framework框架
//
// 为ViewController类
// 添加UINavigationControllerDelegate, MFMessageComposeViewControllerDelegate 接口
// 实现func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult)
@IBAction func sendSMSButtonClick()
{
//判断
if MFMessageComposeViewController.canSendText(){
let controller = MFMessageComposeViewController()
// 设置短信内容
controller.body = "短信内容短信内容"
// 设置收件人列表
controller.recipients = ["15900001111,18900001111,17011112222"]
//设置代理
controller.messageComposeDelegate = self
//打开界面
self.presentViewController(controller, animated: true, completion: nil)
} else {
let alert = UIAlertView(title: "提示信息", message: "本设备不能发短信", delegate: nil, cancelButtonTitle: "确定")
alert.show()
}
}
//代理
func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
controller.dismissViewControllerAnimated(true, completion: nil)
switch result.value{
case MessageComposeResultSent.value:
println("短信已发送")
case MessageComposeResultCancelled.value:
println("短信已取消")
case MessageComposeResultFailed.value:
println("短信发送失败")
default:
break
}
}
//打电话
@IBAction func phoneButtonClick()
{
//调用打电话功能--最简单最直接的方式:直接跳到拨号界面
UIApplication.sharedApplication().openURL(NSURL(string: "tel://10086")!)
}
// 该实例说明了如何使用MessageUI框架组成并在程序内部发送邮件和短信。
//
// 该应用使用MessageUI框架的MFMailComposeViewController类和MFMessageComposeViewController类,这两个类分别管理用户界面并充许用户在程序内部集成发送邮件和短信。
//
// 该实例显示两个按钮,一个为“发送邮件”,另一个为“发送短信”。
//
// 当用户单击“发送邮件”与“发送短信”时,应用分别显示集成的邮件集成界面与短信集成界面。
//
// 应用不但检查它们的集成界面是否存在,还检查设备是否已经配置为了可以发送邮件和短信。另处,它提供了反馈消息。
// MFMailComposeViewControllerDelegate
//发邮件
@IBAction func sendEmailButtonClick()
{
if MFMailComposeViewController.canSendMail()
{
var picker = MFMailComposeViewController()
picker.mailComposeDelegate = self
//设置主题
picker.setSubject("这是一个主题")
//设置发件人
picker.setToRecipients(["1@leadingdo.com","2@leadingdo.com","3@leadingdo.com"])
//设置抄送人
picker.setCcRecipients(["cc1@leadingdo.com","cc2@leadingdo.com"])
//设置密送人
picker.setBccRecipients(["bcc@leadingdo.com"])
//添加图片附件
var path = NSBundle.mainBundle().pathForResource("SwiftClassWeiXin.png", ofType: "")
var myData = NSData(contentsOfFile: path!)
picker.addAttachmentData(myData, mimeType: "image/png", fileName: "swift.png")
//设置邮件正文内容-支持html
picker.setMessageBody("这是邮件正文", isHTML: false)
//打开界面
self.presentViewController(picker, animated: true, completion: nil)
}
else
{
let alert = UIAlertView(title: "提示信息", message: "本设备不能发邮件", delegate: nil, cancelButtonTitle: "确定")
alert.show()
}
}
//发送邮件代理方法
func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!)
{
controller.dismissViewControllerAnimated(true, completion: nil)
switch result.value{
case MFMailComposeResultCancelled.value:
println("邮件已取消")
break;
case MFMailComposeResultSaved.value:
println("邮件已保存")
break;
case MFMailComposeResultSent.value:
println("邮件已发送")
break;
case MFMailComposeResultFailed.value:
println("邮件发送失败")
break;
default:
println("邮件没有发送")
break;
}
}
override func viewDidLoad() {
super.viewDidLoad()
if titleString != nil && titleString != ""{
titleLabel.text = titleString
}else{
titleLabel.text = "第12章 地址薄、短信、邮件";
}
// Do any additional setup after loading the view.
}
ios开发——实用技术篇Swift篇&地址薄、短信、邮件的更多相关文章
- ios开发——实用技术篇Swift篇&播放MP3
播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...
- ios开发——实用技术篇Swift篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- ios开发——实用技术篇Swift篇&拍照
拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...
- ios开发——实用技术篇Swift篇&照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
- ios开发——实用技术篇Swift篇&视频
视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...
- ios开发——实用技术篇Swift篇&录音
录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
- ios开发——实用技术篇Swift篇&多点触摸与手势识别
多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...
- ios开发——实用技术篇OC篇&iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
随机推荐
- C# 类与接口的几个问题的总结(待续)
1. 有关类的多态性 C#中,类的多态性是通过在子类中重载基类的虚方法(virtual标识)或函数成员来实现. 在C#中,继承.虚方法和重写方法组合在一起才能实现多态性. 2. 显式接口成员的使用 显 ...
- android 滑动菜单SlidingMenu的实现
首先我们看下面视图: 这种效果大家都不陌生,网上好多都说是仿人人网的,估计人家牛逼出来的早吧,我也参考了一一些例子,实现起来有三种方法,我下面简单介绍下: 方法一:其实就是对Gesture ...
- 转载:fstream和ifstream详细用法
文件 I/O 在C++中比烤蛋糕简单多了.在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的. 一.ASCII 输出 为了使用下面的方法, ...
- [Tommas] 一种有效的测试策略(转)
在最近的一个大型项目中,我们在早期就定下了一个目标:不会在软件中使用大量QA人员专注于手工测试.通过手工测试发现bug极其耗时且成本高昂,这促使团队尝试尽可能的将质量内嵌到产品内部.但这并不意味着手工 ...
- gcc编译器基本命令
1 unix操作系统 ubuntu 12版本Unix内核0.5天 常用命令2 c语言:标准c 十天主要练习动手能力 小案例水平高的 自己去写案例水平低的 理解并跟着写3 c++:5天高级语言的特点:面 ...
- Chapter5:语句
表达式语句:一个表达式+一个分号 表达式语句的作用是执行表达式并丢弃掉求值结果. 空语句:单独一个分号 Best Practice:使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的 ...
- Codevs No.1163 访问艺术馆
2016-05-31 20:48:47 题目链接: 访问艺术馆 (Codevs No.1163) 题目大意: 一个贼要在一个二叉树结构的艺术馆中偷画,画都处于叶子节点处,偷画和经过走廊都需要时间,求在 ...
- 《Java数据结构与算法》笔记-CH4-2用栈实现字符串反转
import java.io.BufferedReader; import java.io.InputStreamReader; //用栈来实现一个字符串逆序算法 /** * 数据结构:栈 */ cl ...
- cocos2d-x生成随机数
//获取系统时间 //time_t是long类型,精确到秒,通过time()函数可以获得当前时间和1970年1月1日零点时间的差 time_t tt; ...
- 利用管道实现Shell多进程
shell中有个&,表示该程序在后台执行,其实是fork了一个子进程,跟系统调用是一样的. 在实际的操作过程中,有时需要控制后台程序的个数,毕竟启动太多的后台,会对服务的性能造成影响. 所以需 ...