看了两天《Learn Objective-C on the MAC》 中文版本《Objective-C基础编程》,大概认真读到了第9章内存管理部分,感觉这语言可比C++简单多了。
第一天,因为有C语言基础的缘故,我在windows 上安装了GNUstep (Objective-C)开发环境,变看电子书籍,边在PC上编译运行树上的示例,几乎一个都没放过,还做了不少笔记。 (毕竟作者 Mark Dalrymaple & Scott Knaster 是高屋建瓴,叙述技术娓娓道来,将其实很深的技术要点深入浅出地讲出,言简意赅,还将Objc与C语言做对比来说明,印象深刻)。不知不觉就在第一天看完了前8章。
但是从第9章开始内存管理部分,可没有那么好啃了。
“......我们常常讲这些规则复杂化,同样,忽略这些规则也是一种常犯的错误。如果你正在漫无目的地滥用retain 和release 方法1⃣️修正这些错误,那就说明你还没有真正掌握这些规则。你需要放慢速度,休息一下,然后再继续阅读......“ 在《Objective-C基础编程》中,作者如是说。
看说的多好,欲速则不达。
同时,我在临睡前也翻翻知乎的帖子,查看一下前辈的学习建议和曲线。
个人总结如下:
- 如果确定要长期在MAC/IOS下开发,Objective-C & swift 都要学,有了Objc 基础的人千万不要轻视对swift的学习,当然学习C/C++的对Objc/swift 不屑的早晚有后悔的一天。 毕竟语言只是个工具,如果非常熟悉某种语言的话,其实学习objc/swift 的代价会非常小。
- 个人在前两天决心入手MAC book前涉猎了一下app store 上的调查,总结出的结论是: 技术在MAC/IOS上不是瓶颈,难得的是想法和创意。所以在确定要开发项目前,先做一些调查,有利可图再继续做下去,不要埋首到技术钻研和无穷尽的编码中,那样太没有趣味了。
看了《Objective-C基础编程》初步对Objc 有了个初步的了解, (条条框框比C++多,但是要比C 多了不少,掌握起来其实有很大难度的)。
但是swift 倒是一门易学易用的语言,在图书馆借到了 Pitre 的《swift 基础教程2nd》,粗略翻了一下,这门语言可跟javascipt 很像呀。
好了,开始上路。
- Swift 2 是Apple 从头打造的现代语言,功能强大且易于学习。Apple公司已将其作为日益增长的iOS/watchOS/tvOS/Mac OS X 应用程序的开发语言
- Xcode 目前最新的Xcode 最新版本是Xcode8.3
- LLVM 在xcode 中,LLVM在幕后工作,这种编译器技术让Swift 语言变得优雅,并将Swift 代码转换为Apple设备处理器能够运行的机器吗
- REPL (Read-Eval-Print-Loop)是一个命令行工具,可用于快速尝试Swift 代码。在MAC OS X中,可在terminal 中运行它
- playground 在Xcode中,提供了交互性和实时的结果,非常适合用来学习Swift
边看书边实践边写随笔:
Chapter 1 Swift 简介
1. 在Terminal 中输入xcrun swift 可进入REPL,进行swift代码测试
2. 使用var 定义变量,使用let 定义常量
3. swift 基本类型:
Bool, Int ,Int32,Int64,Int8,Int16, UInt,UInt32,UInt64,UInt8,UInt16,Float,Double,Character,String
4. 数学运算法 加 (+),减 (-),乘 (*),除 (/),各种语言在这点都是一个德性。
5. 数值表示法, 二进制,八进制,16进制,科学计数法,与C同
6. 轻松显示字符串
使用嵌入表示法\() 来引用变量/常量,如
let n=10 let name= “Tom” let city=“Shanghai” print (“I am \(name), from \(city), age=\(n)")
7. 使用typealias 定义别名,与C中的typedef 同,如
typealias EightBits=UInt8 var reg:EightBits=0
8.元祖 (Tuple) 元祖是由一个或多个变量/常量/字面量组成的单个实体,如
let myDreamCar=(2017,"Mercedes-Benz","M-Class") print (myDreamCar.0) print (myDreamCar.1) print (myDreamCar.2)
9. 可选类型, (现在还不明白这个用处是?)
var v: Int?
Chapter2 集合
1. 数组
let candyJar=["Peppermints", "Gooey Bears","Happy Ranchers"] print (candyJar[0]) candyJar.append("Candy Canes") //!!! error ,the array is constant var refillableCandyJar =candyJar //将常量数组赋给变量数组 refillableCandyJar.append("Candy Canes") refillableCandyJar+=[Peanut Clusgters"]; refillableCandyJar+=["Banna Taffy","Bubble Gum"] var h20:[String]=["Hydogen","Hydrogen","Oxygen"]; //如果要在声明数组时指定其值的类型
与C同,数组中包含的元素类型必须相同。
用var 定义的是可变的数组,使用let定义的是常量数组。
swift语言中的数组可以类比为C中的向量 vector。
swift中数组可以修改/替换(指定数组索引并赋给它新值即可),删除(removeAtIndex/removeLast),插入(insert:atIndex),合并(+)
- 字典
字典包括两个不同的部分:键 (key)和 值 (value),键和值的类型可以不同,但所有键的类型都必须相同,所有值的类型也必须相同。
va r dict =["one":1, "two":2,"three":3,"four":4] print (dict["one"]) //find dict["five"]=5 //add dict["one"]=11 //update dict["one"]=nil //delete dict.removeValueForKey("two") //delete
- 数组的数组
//Todo
//add some codes
- 创建空数组和词典
var myEmptyArray:Array<Int>=[] //or var myEmptyArray=[Int]() myEmptyArray+=[33,44,66] myEmptyArray=[] //delete all items var myEmptyDictionary =Dictionary<String,Double> () myEmptyDictionary =["myKey",12.34]
- 数组迭代
//method 1 for itemName in list { ... do something with itemName } //method 2 //迭代数组的值及其索引 for (index, candy) in combinedRefillableCandyJar.enumerate () { print ("Candy \(candy) is in position \(index) of the array") }
- 迭代词典
for (index, value ) in arceneauxsOtherCandyRoute { print ("\(key) has a candy jar with the following contents:\(value)") }
swift 基本数据类型学习&介绍完毕
<Chapter 2 end >
请发表评论