让不懂编程的人爱上iPhone开发(2013球iOS7版)-第5篇


不懂程的人上iPhone开(2013球iOS7版)0第5篇 好了,我上次的程。 在上一篇的内容中我花了很多功夫行一些科普和理知的介,在又到了手 了。 首先回到CrazyDragViewController.m,更改sliderMoved作的内容如下: - (IBAction)sliderMoved:(id)sender { UISlider *slider = (UISlider*)sender; currentValue = lroundf(slider.value); } 里我除了NSLog()行代,然后增加了下面的行代替。 currentValue = lroundf(slider.value); 那么行代是什么意思呢?之前我曾看到slider.value,它代表当前刻滑条的数 。数的范在1到100之,当然后面有小数点几位。currentValue是我之前所 建的量名称。 当我要把一个新的数放到一个量里,只需要来写: variableH=HtheHnewHvalue; 就是党号称的“”。我把一个新的“予”量。里我把滑条的数 予currentValue个量。 个比好理解,但lroundf又是怎么回事?才我,滑条的数不是一个 整数,而是小数点后面有几位(在我的Xcode里面小数点后面有6位)。 才使用NSLog()的候,只要拖滑条,就可以在区看到个数。 当然,一来游的度也大大增加了。你不可能猜得那么准,甚至小数点后面6位 都猜到,除非你是神。了游度不至于么,我需要把数成一个最接 近的整数。就是神我把currentValue定一个int整数,因int类型的量里 面会保存整数(integers)。 里的lroundf()是一个函数,它可以把一个小数点的数四舍五入到最接近的整数,然 后我会把后的整数保存到currentValue个量里。 不如果你足够心的,会在行新添加代的旁有个黄色的警告。 警告的内容是:ImplicitHconversionHlosesHintegerHprecision:H‘long’HtoH‘int’ 是什么意思呢?如果你英文得去的,看字面意思就是,式致integer的精 度失。我所定的currentValue是int类型的量,而lroundf个函数返回的是longH int类型的量,所以Xcode提醒我可能会造成精度失。 在算机的世界里,即便是的整数也是分多种类型的,每种类型可以保存的数范 也有所不同。比如准int类型的取范是032768032767,而longHint的取范 是0214748364802147483647。此外有无符号的整数(也就是正数或0),比如 unsignedHint。除了整数类型,有小数的数类型,比如Wloat,Hdouble等等。那么我 使用哪种类型来保存一个基本的数呢? 首先一点,DoHnotHpanic。不要恐慌,你无需像住九九乘法表一住每种量的取 范(虽然你可以做,而且熟悉了之后不需要刻意去也大概知道),可以从或者 网上找。此外,在一般的程序开中,整数类型用int就可以了,小数类型用Wloat也 差不多。但是如果涉及到复的数学算,可能就要改用longHint和double。 在我个例子中,可以确定的是滑条的数在10100之,所以int是足够的。但个 黄色的三角警告是人看着有点不爽,所以我可以把行代改: HHHHcurrentValueH=H(int)lroundf(slider.value); 里用了所的类型强制,虽然lroundf(slider.value)返回了一个longHint类型的整 数,但因我知道个数的范肯定不会超出int类型的整数范,所以在前面加个 (int)把它强制int类型的整数。一来警告就消除了。 不需要提醒的是,强制类型在程中其是一大忌,除非我有百分百的把握, 不要易使用种方法。 什么是函数?函数和方法有什么区别? 我已知道了方法会提供功能,而函数是用添加功能的另一种方式。Objective0C 基于老而弥的C言(三十多年去了,至今仍在程言排行榜的Top3中)。而C 言中使用函数把多行代整合到一个的整体中。在Objective0C中我使用方法,而C 言中我使用函数。 在开iOS用的候,我很少会直接写函数,大多数使用Objective0C开的用会 使用象,然后象用方法。但函数和方法在本上是很类似的。 它唯一也是本的区别是,函数是代世界里独立的生命体,它不依于某个象而生 存。但方法不同,任何一个方法都是某个象的附属生命(寄生体?),同也只有它的 宿主象才能用个方法。 当然,它的子也很不一: //H下面的个是方法: [someObjectHmethodName:parameter]; H //H下面的个是函数: SomeFunction(parameter); 幸的是,iOS的用中同支持C言H写的代,也同支持C言所提供的大量有用 的内置函数。Lroundf()个函数就是其中的一个。后面我会用到其它的函数。 便提一下,NSLog()也是一个函数。 区分函数和方法其很,函数的名称后面着括号,括号里面有一个或多个参数,而 方法的用是用方括号,任何候你都不会看的。 在我更改showAlert方法如下: 0H(IBAction)showAlert:(id)senderH{ HHHH HHHHNSStringH*messageH=H[NSStringHstringWithFormat:@"滑条的当前数是: %d",currentValue]; HHHH HHHH[[[UIAlertViewHalloc]initWithTitle:@"您好,老"Hmessage:messageHdelegate:nilH cancelButtonTitle:@"一是个好学校"HotherButtonTitles:nil,Hnil]show]; HHHH } 和之前一,我建并示一个提示框,不一次的内容了,我使用 message代替之前的文字内容,而message的内容使用NSString来定。 NSString是iPhone的字符串象。在Objective0C的世界里,象无不在。字符串同属 于象。 通下面的行代, NSStringH*messageH=H[NSStringHstringWithFormat:@"滑条的当前数是: %d",currentValue]; 我使用sringWithFormat方法建了一个名message的新字符串象,方法有两 个参数:一个格式的字符串,有一个用来替代占位符的数。 后面的部分我曾看到。在NSLog()函数里面用的是类似的字符串,只不用%d替代 了%f。%d和%f的区别是,%d代表一个整数,而%f代表小数(用党的行又叫“浮 点数”,至于神么叫,你只需要知道和算机的CPU硬件有关,就不多做解了, 只当是学外的用法了)。因currentValue个量里面保存的是整数,所以需要 使用%d。 便提一下,程序猿党的口中常会冒出很多稀奇古怪的,我等吓得屁滚尿流 奉若神明。其完全不用恐慌,想想我是如何学字和英的。你学某个字会追溯到 繁体字,甲骨文,甚至用文解字来透分析每个字的起源?不会,即便是莫言莫大 恐怕也没份功力,但是影响他写出拿的作品?不影响。所以,每当看到或听到 些,最多到wikipedia或百度百科里面看看大概的意思就好了,不必深究。言只是 一个工具,算机言也是如此,除非你要明自己的言,否最重要的事情是用它 来做出一款好的品,其它都是浮云。大道至,凡是喜用忽悠人的,大可以鄙夷 之。若干年后,些門自会烟消云散。 假定currentValue是34,就意味着滑条大概在靠左1/3的位置。那么我上面的代 就会把字符串化:“滑条的当前数是:34”,然后把个字符串放到名 message的NSString象中。NSLog()之前做了类似的事情,只不它是直接把果打印在 面板中。里我使用提示框,因玩家看不到面板的内容,但可以看到 提示框。 点Run行用,拖滑条,然后触碰按。在就会出一个提示框告你滑 条的当前数。 不,又前了一步。虽然我前每一步都很慢,但每一步都很。里我使用一 个量来保存滑条当前位置四舍五入后的数,用中的其它地方就可以用到量 里面的。比如里在提示框中就用到了。如果我不移滑条就触碰按,那么 框中的数也会保持不。量会始住保存在它里面的数,直到我放入新的 数。 本地量HvsH例量 我回来再看看showAlert个作的内容: 0H(IBAction)showAlert:(id)senderH{ HHHH HHHHNSStringH*messageH=H[NSStringHstringWithFormat:@"滑条的当前数是: %d",currentValue]; HHHH HHHH[[[UIAlertViewHalloc]initWithTitle:@"您好,老"Hmessage:messageHdelegate:nilH cancelButtonTitle:@"一是个好学校"HotherButtonTitles:nil,Hnil]show]; HHHH } 里面的message也是一个量,它的作用是保存新建的字符串。它的数据类型是 NSString。Oops,里有一个*星号,又是干用的呢?*星号是必不可少的,因NSString 是一个象,而在Objective0C中,建象的候必在其名称前面加上一个星号。 回来,alertView个提示框也是一个量,不它保存的是UIAlertView象。 message和alertView两个量属于同一类型,而currentValue是另外一种类型。是 因message和alertView量作代世界的生命体,其生命周期非常短。它被称 本地量,因它的声明开于showAlert作开始行的候,而当showAlert个 作完成后,它的生命就走到了点。一旦showAlert方法行完, CrazyDragViewController就会message和alertView两个量,同清理掉它 所占用的存空。 currentValue量不同,它会活的久一点。只要CrazyDragViewController活着(玩家 没有退出用),它就会一直活着。个类型的量又被称例量(党了一个 可的写是ivar),因它的生命周期和它所属的象例的生命周期是相同的。如果 我要某个数从一个事件到另一个事件,就必使用例量。 好吧?糊涂了?别太担心一点,在教程的程中我将重复一些重要的概念。很快 量的理解就会成你的本能反。 捉“虫子” 在代的世界里面,bug(虫子)很可,它的作用是玩家所看到和感受到的西和你 所的西南北。大多数程序猿其一生(好吧,是在他的生命周期里)都 在和虫子打交道。无虫子,不程。 虽然个游没多少西,里面已出了bug。在我看看个bug的表: 点Xcode上的Stop完全关用。然后点Run重新行,先不要拖滑条,直接按 按。 框提示,“滑条的当前数是:0”。但然滑条的拖手柄在中,个数 是50才啊魂淡!可的虫子! 小:想想看神个数会是0. 答案:索在里,只有当我不拖滑条就按按的候才会出个bug.然,当 我没有拖滑条的候,sliderMoved个消息根本没机会送,我也不可能 取滑条的数,把它保存到currentValue量中。而在Objective0C里面,例量的默 是0,所以我就看到了个bug。 了消个虫子,我需要更改一个方法。在Xcode中点 CrazyDragViewController.m,然后找到viewDidLoad个方法,在里面的代如下: 0H(void)viewDidLoad { HHHH[superHviewDidLoad]; H //HDoHanyHadditionalHsetupHafterHloadingHtheHview,HtypicallyHfromHaHnib. } 当我使用准模板建个目的候,Xcode自加入了viewDidLoad个方法。 在我需要加点代去。 更改viewDidLoad方法如下: 0H(void)viewDidLoad { HHHH[superHviewDidLoad]; HHHH HHHHcurrentValueH=H50; H //HDoHanyHadditionalHsetupHafterHloadingHtheHview,HtypicallyHfromHaHnib. } 当我打开用的候,一旦控制器从nib文件加它的用界面,就会通UIKit 送viewDidLoad消息。控制器仍然不是可的,所以此定高一些初始数非 常合适。在里,我将currentValue的初始置50,也就是滑条的默初始位置 的数。 点Run行用,然后看看虫子被消没有。 科普0什么是注 你可能已多次看到了用//开始的了吧?H些被称注。你可以在个符号后面 写任何文字(包括吐槽,情,政治宣言,入党申,笑,YY小, 划。。。)反正器看到//就会自无后面的西。 //H我是注行。窗外雷,我虎躯一震,哥竟然穿越了,有木有! 除了//之外,我可以使用/*和*/。区别在于//只能注一行文字,而/*和*/可以注 它中的多行文字。 通常使用/*和*/来注掉一整代。 不在的使用中,哥推荐//。在Xcode中,把光放在要注的那行代上,然后按 快捷CommandH和/,就可以了。或者中一整代,用个快捷,也是一。 注行的最佳用是解你的代的作用。虽然好的源代自己可以明自己,但打点 广告,添加点明和解是很有必要的。向解呢?很多候向你自己,不是一个月 后的自己,半年后的自己,甚至是几年后的自己。除非你的如同算机一的精确, 而且不死机,那么注就很有必要。 你可能看到了,Xcode在你的目文件中自你加了的一段注: // // CrazyDragViewController.m // CrazyDrag // // Created by happybubsy on 9/14/13. // Copyright (c) 2013 ioslearning. All rights reserved. // 个其没什么用,看看就好,不爽了可以掉。 好了,今天的学到此束,老送福利1P,老的教感言。
还剩9页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf