iOS开发系列课程预告

近期在Mac和iOS上做开发,认为应该写一点东西分享给感兴趣的童鞋们。在此之前。以前有非常多同行们都在埋怨苹果Objective-C的复杂和难以上手,为此也有非常多人对今年(2014年)刚推出的Swift抱有非常多幻想。

首先在现阶段甚至五年以内,我个人感觉Mac和iOS的开发能够说仍然离不开Objective-C,即便是应用级(非系统级)的开发,招聘iOS程序猿肯定还是看有没有扎实的Objective-C的功底。尽管苹果希望Swift能够代替Objective-C,但这一定是一个长期目标。

在Swift的公布会上,库克说Swift会成为改变一切的语言。只两个月之后,在TIOBE公布的编程语言排行榜上。Java和C++再创历史新低(当然我最钟爱的C语言仍然占领头把交椅,尽管它的Rating也下降了0.25%),而Swift作为一个新生儿直接抢占了第18名的宝座(大约100个程序猿里面就有一个使用Swift的),人们对这个语言的期待能够说是异常的高。然而,我想说的是。Objective-C没有想象中的那么难。而Swift也不是轻松愉快就能玩转的,Swift同一时候接纳了两种编程理念或者叫范式(paradigm)。面向对象编程和函数式编程,而在此之前。关于面向对象编程和函数式编程到底孰优孰劣的争论非常长时间都没有停止过。事实上,真正理解两种编程范式的程序猿不会武断的说这二者孰优孰劣,由于不论什么编程语言都没有什么灵丹妙药让其使用者成为优秀的程序猿。又如牛人王垠说的。『不管不论什么事情,当走向极端时都是有害的。极端化时。面向对象编程和函数式编程都试图将整个世界装入其特有的模型中,可是这个世界是不依赖于我们的大脑的思考的情况下运转的。

假设以为你有一个锤子。就把全部东西都当成钉子,这显然是不正确的。唯独通过认清我们的真实世界。才干摆脱信仰对我们的束缚。』『让你的模型适应世界,而不是让世界适应你的模型。』尽管我不喜欢王垠这个人,可是这段话我还是非常赞同的。林锐博士也说过,『一个优秀的程序猿不会宣称自己效忠于某种语言』。他们总是选择最合适的工具做自己想做的事。

事实上,即便你是一个Java程序猿,假设你使用过訪问者模式、命令模式。假设你使用过接口回调,你实际上已经使用了函数式编程的理念。相同,你也能够用C语言写出面向对象风格的代码。

Swift能够说是比JavaScript还大杂烩的大杂烩。从它身上你似乎不怎么能看到Objective-C的影子,可是却有JavaScript、C#、Java和其它一些我不了解的动态语言/函数式语言(如Ruby、Python、Haskell)的身影,仅仅是这一点就注定了它『绝不简单』。事实上苹果早在2010年就任命Chris Lattern为iOS开发下一代编程语言。经过4年的时间才打造出了Swift。简单的说,Swift是支持面向对象和函数式两种编程范式的语言,它在动态语言和静态语言之间寻找平衡点。既有静态语言的特征,也详细动态语言的神韵。同一时候它也是类型安全语言,又支持非常多高级语言特性。包含闭包、泛型等。Swift能给非常方便的和C/C++/Objective-C进行混合编程,使用Unicode字符集。和Swift一起推出的是Xcode中的Playground,这个东西尽管让某些程序猿认为惊艳,可是事实上IBM早在十年前就有类似的东西,仅仅只是没有Playground那么炫罢了。近期看了苹果iPhone6的公布会。突然认为对苹果的未来持悲观态度了,没有了乔帮主,苹果还能牛多久呢,谁也不知道。

反正,作为一个程序猿或者开发人员,无论你选择使用Objective-C还是Swift,都会有非常长的路要走,要经过各种修炼。事实上Objective-C那种声明和实现分离的做法不就是在践行面向对象原则中的接口和实现分离。面向接口编程的理念吗。所以在我心中那是非常优雅的。

Swift中的protocol(协议)不也是如此吗,仅仅只是protocol这个词easy让人误解,可能就叫接口(interface)或者契约会更好吧。

以下给出一些链接帮助有兴趣的童鞋们阅读相关资料,同一时候附上一段用Objective-C写的代码。做的是一个计算机自己跟自己玩猜数字的小游戏。

面向对象编程语言中的函数式编程:http://blog.csdn.net/shendl/article/details/2064218

王垠:面向对象和函数式编程的问题出在哪里?http://geek.csdn.net/news/detail/3603

TIOBE 2014年9月编程语言排行榜:http://www.csdn.net/article/2014-09-09/2821587-tiobe-programming

下图展示了Xcode 6的新功能Playground:

用Objective-C写的猜数字游戏(计算机自己出一个1-100的随机数。然后自己来猜答案)

#import <Foundation/Foundation.h>

@interface Game : NSObject {
    @private
    int correctAnswer;
    NSString *hint;
}
- (Game *) init;
- (int) judge:(int)thyAnswer;
- (NSString *) getHint;

@end

@implementation Game

- (Game *) init {
    self = [super init];
    correctAnswer = arc4random() % 100;
    return self;
}

- (int) judge:(int)thyAnswer {
    if(thyAnswer == correctAnswer) {
        hint = @"恭喜你,答对了。";
    }
    else {
        if(thyAnswer < correctAnswer) {
            hint = @"大一点";
            return 1;
        }
        else {
            hint = @"小一点";
            return -1;
        }
    }
    return 0;
}

- (NSString *) getHint {
    return hint;
}

@end

int main() {
    Game *g = [Game new];
    int lower = 0, upper = 100;
    int result = 0;
    do {
        int myAnswer = (lower + upper) / 2;
        NSLog(@"I guess the answer is: %d", myAnswer);
        result = [g judge:myAnswer];
        NSLog(@"%@", [g getHint]);
        switch(result) {
            case -1:
                upper = myAnswer; break;
            case 1:
                lower = myAnswer; break;
        }
    } while(result != 0);
    NSLog(@"游戏结束!");
    [g release];
    return 0;
}

因为Mac系统是基于Unix的操作系统。因此打开终端程序能够通过键入命令的方式来编译和执行上面的代码,命令例如以下:

cc -framework Foundation 文件名称.m (cc就是c-compiler,Unix系统的C编译器,也可以编译Objective-C并生成目标代码)

当然。上面的代码并不应当放在同一个文件里,@interface部分放在头文件(后缀名为.h的文件)中,而@implementation部分放在源文件(后缀名为.m的文件)中。一个定义接口。一个定义实现,做到接口跟实现分离,将来能够通过置换调实现文件来提供新的或者不同的功能。为此,你应该直接使用Xcode来建一个项目,例如以下图所看到的:

时间: 2024-09-28 15:28:28

iOS开发系列课程预告的相关文章

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

iOS开发系列--让你的应用“动”起来

--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单: CALayer CALayer简介 CALayer常用属性 CALayer绘图 C

iOS开发系列文章(持续更新……)

iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大家交流,新建一个iOS技术交流群,欢迎大家加入:64555322 C语言 IOS开发系列--C语言之基础知识 IOS开发系列--C语言之数组和字符串 IOS开发系列--C语言之指针 IOS开发系列--C语言之预处理 IOS开发系列--C语言之存储方式和作用域 IOS开发系列--C语言之构造类型 Ob

iOS开发系列--通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 推送通

iOS开发系列--数据存取

概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列—Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经规定只能保存到沙盒的Library/Preferences目录.当然,文件存储并不作为本文的重点内容.本文重点还是说数据库存储,做过数据库开发的朋友应该知道,可以通过SQL直接访问数据库,也可以

iOS开发系列--通知与消息机制--转

来自:http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何

IOS开发系列--无限循环的图片浏览器

--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前

iOS开发系列之一 - UIButton 用法小结

// 初始化按钮并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 能够定义的UIButton类型有以下6种: // typedef enum { // UIButtonTypeCustom = 0, 自定义风格 // UIButtonTypeRoundedRect, 圆角矩形 // UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用 // UIButto

iOS开发系列之二 - UILabel 用法小结

// 初始化标签 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 150)]; // 设置标签文字 label.text = @"This is a test text.This is a test text.This is a test text."; // 设置标签文字字体 // 使用系统字体 label.font = [UIFont systemFontOfSize:20]; //