iOS编程读书笔记

这篇博客详细介绍了iOS编程的基础,从创建第一个简单的iOS应用开始,涵盖了模型-视图-控制器(MVC)概念,Objective-C的使用,包括对象、消息发送,以及内存管理中的ARC。同时,讲解了视图与视图控制器的创建、视图层次结构,以及如何通过Auto Layout进行界面布局。此外,还探讨了视图控制器的生命周期、委托和文本输入,以及数据持久化和Web服务的使用。
摘要由CSDN通过智能技术生成

11,22,23,24,25,28暂时不需要看

1 第一个简单的iOS应用

  • 单击按钮可以改变文字。

1.1 创建Xcode项目

  • 创建项目的时候Xcode会提供一些包含通用代码的模版,可以根据需要选择模版。
  • 创建项目是需要填写Organization Name和Company Identifier,也可以填入自己的公司名称和公司的反向域名。
  • Class Prefix在Xcode 7.2创建项目里面已经没有了,或许是因为默认创建的项目类太少,但是自己在创建类的时候还是加上前缀为好,因为OC没有命名空间。
  • 工作控件左侧是导航面板区域,中间是编辑区域。

1.2 模型-视图-控制器

  • 简单介绍了MVC,下图清晰阐述了MVC中各模块扮演的角色。

1.6

1.3 设计Quiz

  • 使用MVC思想,设计一个名叫Quiz的程序,实现单击按钮改变文字。
  • 下面的应用对象图,勾勒出了对象之间的相互关系。

1.7

1.4 创建视图控制器

  • 新版本Xcode会自动创建ViewController类了,且用storyboard文件来管理视图。
  • storyboard是多个xib文件集合的描述文件,也采用xml格式。那么storyboard与xib比较,区别在于:

    • 一个工程中可以有多个xib文件,一个xib文件对应着一个视图控制器和多个视图。而使用storyboard时,一个工程只需要一个主storyboard文件就可以了。
    • 在包含多个视图控制器的情况下,采用storyboard管理比较方便,而且storyboard还可以描述界面之间的导航关系。
  • Interface Builder一些介绍:

1.5 创建界面

  • 单击main.storyboard编辑视图,画布中间的视图比较宽,可以在右侧属性面板将Use Auto Layout勾选掉。
  • 通过Interface Builder在main.storyboard中添加Button和Label。
    • 构建项目时main.storyboard会被编译为NIB文件,然后Xcode会将NIB文件拷贝到应用程序包(bundle)中,其实就是应用程序以.app结尾的后缀。
    • 应用程序运行时会从程序包中按需载入NIB文件并激活文件中的对象。

1.6 创建关联

  • 通过connection,一个对象可以知道另一个对象在内存中的位置,从而使这两个对象可以协同工作。
  • Interface Builder中的两种关联:
    • outlets:指向对象的指针变量。
    • actions:动作方法,在视图对象和用户发生交互时会被调用。
  • 新版本Xcode创建项目使用storyboard所以没有File's Owner,可以通过打开Assistant editor方便的关联对象:

1.7.1

  • 创建关联在main.storyboard中的体现如下:

1.7.2

1.7 创建模型

  • ViewController对象创建完毕后会收到消息:initWithNibName:bundle:,所以可以在这里进行一些数据创建和初始化。

    • 不一定非得在initWithNibName中初始化数据,新版本Xcode创建的默认项目,使用initWithNibName不会有效果,可以使用initWithCoder
    • initWithNibName和initWithCoder的区别
  • 关于代码自动补全功能:

    • 要实现模糊匹配可以安装FuzzyAutocomplete插件。
    • 自动补全后会有一些占位符,如果要使用占位符,可以按回车即可。

1.8 其它

  • AppDelegate应用程序委托是每个iOS应用都必须具备的启动入口。
  • 新版本Xcode不需要在委托中添加代码,如果按照书中添加代码,会出现白屏。
  • 模拟器中选择Simulator|Reset Content and Settings...可以将模拟器还原到默认设置并删除所有应用。

2 Objective-C

  • 开发iOS应用使用Objective-C和Cocoa Touch框架.

2.1 对象

  • Objective-C语言中,实例变量的变量名之前通常会加一个下划线,如_name,_date,_budget。
  • 调用某个对象的方法,可以向对象发送相应的消息(message)。

2.2 使用对象

  • 创建变量并进行初始化:Party *partyInstance = [[Party alloc] init];,将多个消息合并在一行的写法叫做嵌套消息发送(nested message send)。
  • 消息发送代码各组成部分:

2.2

  • 在Objective-C中,方法的唯一性取决于方法名,即使参数类型和返回类型不同,一个类也不能有两个名称相同的方法。

2.3 编写命令行工具PandomItems

  • 不能在快速枚举for in中添加或删除对象,否则抛出异常。
  • Objective-C格式字符串基本和C语言相同,%@对应的实参类型是指向任何一种对象的指针,通过覆盖description方法定义格式化输出。

2.4 创建Objective-C类的子类

  • Objective-C只允许单继承,所有的类都只能有一个父类。
  • Objective-C保留了C语言的关键字,并增加了特有的关键字,新的关键字都用前缀@加以区分。
  • Objective-C类中的存取方法名的规范为:
    • 存方法命名规则为英文单词set加上要修改的实例变量名,以_itemName为例,存方法名为setItemName:
    • 取方法名就是实例变量的变量名itemName,其它语言大多为:getItemName
  • #import#include的差别在于,#import可以确保不会重复导入同一个文件。
  • 使用点语法存取变量例如item.itemName编译后和发消息一样,也是调用之前写好的存取方法,所以存取方法名要按照规范书写。Apple官方代码坚持使用点语法存取实例变量。
  • 实例方法和类方法:调用实例方法时,需要向类的对象发送消息;调用类方法时,则向类自身发送消息。
  • 使用存取方法访问实例变量是良好的编程习惯,即使是访问对象自身的实例变量,也应该使用存取方法,但是在初始化方法中例外。

  • 初始化方法

    • 每个初始化方法以英文单词init开头,Objective-C中命名约定很重要,应该严格遵守。
    • 初始化方法的返回类型是instancetype,该关键字表示方法的返回类型和调用方法的对象类型相同。
    • instancetype引入之前,初始化方法返回类型是id,表示指向任意对象的指针,类似C语言的void*
  • instancetypeid
    • instancetype只能用来表示方法返回类型,id可以用来表示变量和方法参数类型。
    • id的定义是指向任意对象的指针,所以不需要再加*,比如:id item
  • 书中提到的指定初始化方法(designated initializer)不明白,根据书中后面的"其它初始化方法与初始化方法链的理解",指定初始化方法不同在于可以供其它初始化方法调用,但不调用其它初始化方法,通常参数最多。
  • selfsuper
    • self为类或对象自身,存在于方法中,是一个隐式(implicit)局部变量,相当于c++的this
    • super为父类,向super发消息,其实就是向self发消息,但是要求系统再查找方法时跳过当前对象的类,从父类开始查询。
  • 在初始化方法中应该直接访问实例变量,而不是使用存取方法。因为初始化方法执行时,无法确定新创建对象是否已经处于正确设置,所以应该直接访问类中实例变量。(其实这只是习惯问题)
  • 初始化方法总结的若干规则:

    • 类会继承父类所有的初始化方法,也可以加入其它初始化方法。
    • 初始化方法要直接或间接调用父类的指定初始化方法。
    • 其它初始化方法要直接或间接调用自身的指定初始化方法。
  • 类方法的声明和实例方法的声明差别在于第一个字符,实例方法为-,类方法为+

  • 在头文件中实例变量声明写在最前面,然后是类方法,接下来是初始化方法,最后是其它方法。这也是一种约定规范。
  • 在Objective-C中,如果某个类方法的返回类型是这个类的对象(例如:stringWithFormat:),就可以将该类方法称为便捷方法(convenience method)。

2.5 深入学习NSArray与NSMutableArray

  • Objective-C数组相关:
    • 可以存储不同类型继承自NSObject的对象指针,不能保存基本C类型变量。
    • 不能将nil加入数组,可以用NSNull代替,例如:[items addObject:[NSNull null]];
    • 访问数组可以使用下标语句NSString *foo = items[0];或发消息NSString *foo = [items objectAtIndex:0];,这两种方法效果是相同的。
  • 现在方括号的作用有3种:发送消息、存取方法、访问数组,如果使用点语法存取方法,下标语法访问数组,可以清晰突出发送消息代码。
  • NSMutableArray中,可以使用下标语法向数组中添加和修改对象,等价于insertObject:atIndex:replaceObjectAtIndex:withObject:发消息。

2.6 异常与未知选择器

对书中的疑惑:

  • 书中意思是说所有类对象都是运行时绑定,但是感觉并不是所有OC对象都是运行时(runtime)绑定,除了书中展示的使用id来接收创建的对象时,这时候书中所说的isa可能就不起作用了?
  • 关于错误和异常处理:
    • Dealing with Errors
    • Handling Exceptions

2.12 如何为类命名

  • OC没有提供命名空间机制,为了区分类,需要为类添加前缀。例如,开发一个MovieView应用,就可以在所有和项目相关的类名前加上MOV。
  • Apple提供的类名都为2个字符前缀,为了减少与Apple未来发布类产生冲突的可能,我们要使用至少3个字符前缀。

2.13 #import和@import

  • @import Fundation告诉编译器需要使用Foundation框架,之后编译器会优化预编译头文件和缓存编译结果过程,文件中不再明确引用框架,编译器会根据@import自动导入相应框架。
  • 目前只有Apple提供的框架可以使用@import,如果需要导入自己写的类和框架,只能使用#import

新版本的Xcode已经不会自动创建预编译头文件,因为预编译头文件会带来代码复用困难等问题。

  • Why isn't ProjectName-Prefix.pch created automatically in Xcode 6?

3 通过ARC管理内存

  • 提出了"自动引用计数(automatic reference counting,ARC)"的概念。(涉及到自动管理资源的都会有引用计数的概念,类似C++智能指针)
  • ARC和java的GC的区别是:ARC为编译时计算引用计数,GC在运行时计算。
    • What is the difference between Objective-C automatic reference counting and garbage collection?

3.1 栈

  • 执行方法或函数是从内存栈(stack)中分配空间,每块空间称为帧(frame),用来保存方法内声明的变量值。
  • 调用main函数时栈的变化过程如下图:

3.1

3.2 堆

  • 堆(heap)是内存中另一块区域,和栈是分开的。
  • 栈和堆区别是:栈按后进先出规则保存一组帧,堆则包含了大量无序的活动对象,需要通过指针来访问。

  • 发送alloc消息是从堆上分配内存。

  • iOS应用通过ARC来自动完成堆内存管理工作。

3.3 指针变量与对象所有权

  • 如果堆内存中对象,没有指针指向它的话就会被释放掉,系统会自动记录有多少对象指针引用它,1个引用ARC就为1,2个为2,0个内存会被释放。
  • NSObject实现了一个名为dealloc的方法,当某个对象即将被释放时,程序会调用该方法。

3.4 强引用与弱引用

  • 只要指针变量指向了某个对象,那么相应的对象就会多一个引用计数,并且不会被释放。这种指针特性称为强引用(strong reference)。
  • 也可以选择让指针变量不影响某指向对象的引用计数,这种不会改变对象拥有者个数的指针特性称为弱引用。
  • 弱引用用来解决强引用循环问题(strong reference cycle,也称保留循环),当两个以上对象相互之间有强引用时就回产生强引用循环。

强引用循环问题

  • 存在强引用循环问题如下图:

3.4

  • 图中两个BNRItem对象中包含两个指向BNRItem对象的指针_container和_containerItem互相指向彼此。

  • 当items设置为nil后,没有两个BNRItem对象引用计数减1,但是互相依然强引用,所以内存无法释放,如下图:

最低0.47元/天 解锁文章
iOS读书笔记之Objective-C高级编程(GCD)
路漫漫其修远兮,吾将上下而求索.
08-01 791
本文主要对GCD的概念、API以及实现进行梳理.一.CCD的概念.1.GCD,全称是Grand Central Dispatch,它是C语言的API. GCD的核心 : 将block(任务)添加到queue(队列)中.
iOS编程(第4版)
10-09
iOS编程》荣获Jolt生产力大奖。全书涵盖了开发iOS应用的方方面面。从Objective-C基础知识到新增加的语言特性;从AppKit库到常见的Cocoa设计模式;从Xcode技巧到Instrumen tst等。如果读者刚接触iOS编程,阅读本书前两章可以快速入门。如果读者已经有iOS编程经验,阅读本书可以拾遗补缺。
iOS 精益编程
晓月的专栏
10-18 1万+
iOS 精益编程开场今天, 我们将从一个小功能开始, 先去不假思索的实现它 Product Repository: Filtering Operation Code start有一个产品库, 我们要对它做过滤操作.第一个需求并不复杂. 需求1:在仓库中查找所有颜色为红色的产品 First Attempt: Hard Code我们先用最简单的方式去实现它, 硬编码- (NSArray *)findAl
探索iOS开发语言基础与Xcode工具:从零开始构建你的第一个iOS应用
最新发布
06-29 1881
在当今移动应用广泛普及的时代,iOS开发成为了许多程序员追求的目标。无论你是一个新手开发者,还是有经验的编程高手,理解iOS开发的基础语言和掌握Xcode这个强大的工具都是至关重要的。本文将详细介绍iOS开发所需的语言基础以及Xcode工具的使用,帮助你从零开始构建你的第一个iOS应用。
IOS编程 浅析
热门推荐
banketree
10-10 1万+
1、简介IOS是由苹果公司为iPhone、iPod touch和iPad等设备开发的操作系统。2、知识点1、委托机制与Core location委托机制是Cocoa Touch的一种设计模式,Core location框架则是提供IOS内建的位置定位功能。2、CLLocationManager位置信息管理,获取最新的位置信息。3、预处理编译源代码分为两个步骤:预处理和编译。4、MapKit框架主要
iOS编程
印林泉的专栏
02-16 484
选用自适应布局和通用Storyboard 把现有的Storyboard转换成 通用Storyboard 。打开你的Storyboard,在Info Panel(command+option+1)信息面板中选定 Use Size Classes :    CocoaChina:对于学习Swift的开发者,入门以后应该如何进一步提高? 王巍:可以尽快开始动手实践开发一些 app。给自己定一个目
IOS学习十一:ios开发之网络编程
mmdev
05-21 214
上周末本应早写这个网络和MapKit的。 由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。 网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有这块, 最近刚买的开发秘籍那本上的关于网络链接这块,太抽象了。 首先吐槽一下这本书,细节描述的还是不错的。但是不合适做入门~ 然后在网络上搜索关于ios的网络编程基本就首页全是讲的同一篇文章,被转烂了。 ...
iOS开发标准教程》读书笔记模板.pptx
09-16
iOS开发标准教程读书笔记模板 iOS开发标准教程读书笔记模板是 iOS 开发领域的一本实战性非常强的教程,旨在帮助读者从零基础开始学习 iOS 开发技术。本书共分为四篇,涵盖了 iOS 开发的各个方面,包括 iOS 9 开发...
MyNotes:iOS学习笔记
05-13
其次,描述中提到的"读书笔记"可能包含了对经典iOS开发书籍的总结,例如《Objective-C编程语言指南》、《iOS编程:The Big Nerd Ranch Guide》等。这些书籍通常会详细解释Objective-C的语法,以及如何使用Xcode进行...
iOS编程比较好开源的完整项目iOS编程比较好开源的完整项目
m0_67912190的博客
03-25 3437
完整项目 GSD_WeiXin高仿微信 v2ex- v2ex 的客户端,新闻、论坛。 V2ex-Swift- 用 Swift 写的 V2EX 客户端。 iBBS-Swift- “新手开源一个用Swift(2.0)写的论坛客户端”。BBS 服务端。 wikipedia-ios- wikipedia-ios 客户端。 jetstream-ios- 一款 Uber 的 MVC 框架。它同时提供了多用户实时通讯支持,一旦启动 JetStream 后端服务,通过 WebSocket 协议可以分...
iOS 编程(第6版)》 配套资源 含源代码
04-30
iOS 编程(第6版)》 配套资源 含源代码 《iOS 编程(第6版)》 配套资源 含源代码
iOS编程 第四版
10-01
作者[美] Christian Keur / [美] Aaron Hillegass / [美] Joe Conway
iOS 编程第三版
03-18
iOS 编程第三版 全面细致地讲解Cocoa Touch的基础知识,深入解读并剖析在开发iPhone及iPad应用时可能遇到的各种问题,并揭示如何高效地使用Objective-C
iOS编程 第六版 英文版
11-16
iOS Programming 6th big nerd ranch iOS Programming 6th big nerd ranch
iOS编程:学习篇(一)
BruceLee_csdn的博客
06-23 1263
chapter 1虽然从事C语言开发BIOS工作,但是依旧被面向对象的快捷方便所吸引。 接下来静下心来,准备学习学习iOS编程,希望来年能够从事iOS开发工作,希望能够做一个愉快的码农,并且能够继续深入研究数据结构和算法。摒弃速成的培训班视频,入手老美的一本《iOS编程》,从点滴做起,犹如当初学习C语言,对Objective-C保持热情!在成为iOS程序员,必须克服三道难题: - 必须学会Obj
ios编程经历
咫尺天涯的专栏
06-28 605
hello
iOS编程入门:实战指南
"IOs+4编程入门经典,一本面向初学者的实用教材,详细介绍了iPhone和iPad开发,涵盖iOS4的新特性,包括Web服务编程、蓝牙编程、Bonjour编程和Apple推送通知服务等。" 在移动互联网时代,苹果的iPhone以其出色的操作...
写文章

热门文章

  • 用SourceTree轻松Git项目图解 47573
  • vim代码折叠功能 28109
  • vim查找和替换详解 27932
  • 解决win10系统alt+tab切换程序不显示程序缩略图问题 23399
  • xampp在linux下无法使用mysql命令 16510

分类专栏

  • 区块链
  • ACM 25篇
  • GIT 3篇
  • Linux 6篇
  • OpenCV 7篇
  • PHP 2篇
  • VIM 11篇
  • Mac 3篇
  • VC++ 17篇
  • VxWorks 3篇
  • 算法 25篇
  • 串口通信 1篇
  • 其它总结 4篇
  • Jenkins 3篇
  • Windows 1篇
  • iOS 7篇
  • Python

最新评论

  • 解决win10系统alt+tab切换程序不显示程序缩略图问题

    Bug哆哆: 非常棒!

  • 解决win10系统alt+tab切换程序不显示程序缩略图问题

    zzz向上好青年: 成功了,谢谢。大图切换真的太难受了,这个描述步骤清楚,简单,太感谢了。

  • windows下关闭gvim叮叮叮和闪屏

    FLUENTYAN: 可以的表情包

  • 提取轮廓两种方法及绘制轮廓中最大等级分析

    Caesar1027: 顶顶顶

  • 《学习openCV》例程解析 ex_9_3(codeBook模型实现背景减除)

    马也哥: 太棒了,没想到六年前就有这种代码

大家在看

  • 十四、 软件可靠性基础知识(考点篇) 478
  • 鸿蒙Harmony-Next 徒手撸一个日历控件 767
  • Glass Optimization玻璃优化
  • 虚拟化(Vmware系列)&双系统系列&运维系列:【已解决】Failed to initialize NVML: Driver/library version mismatch NVML librar
  • 打卡信奥刷题(780)用Scratch图形化工具信P6414[普及组/提高组] [COCI2014-2015#1] PROSJEK 350

最新文章

  • NSArray和NSString copy属性问题
  • 关于前后端接口的可扩展性思考
  • 常见的全局变量定义
2017年2篇
2016年7篇
2015年56篇
2014年8篇
2013年29篇
2012年20篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家河源玻璃钢卡通座椅雕塑玻璃钢地貌图雕塑批发贵州校园玻璃钢雕塑订制岑溪玻璃钢景观雕塑玻璃钢蔬菜雕塑制作商浙江商场美陈制作玻璃钢人物雕塑手工制作许昌标识标牌玻璃钢彩绘雕塑哪有玻璃钢雕塑厂家商场美陈 厦门白城玻璃钢雕塑定制价格江苏玻璃钢雕塑茶几不锈钢仿古玻璃钢彩绘雕塑小品淮安玻璃钢雕塑成品玻璃钢人物雕塑哪家好蝴蝶玻璃钢卡通雕塑工厂潮州玻璃钢读书人物雕塑定制商场美陈dp意思玻璃钢花盆有多厚太原商场美陈公司西宁卡通玻璃钢雕塑厂家福建秋季商场美陈价格商场美陈定做玻璃钢雕塑料厂家蚌埠欧式玻璃钢雕塑保定玻璃钢雕塑生产厂家苏州正规玻璃钢雕塑服务至上游乐园门头玻璃钢雕塑呈贡玻璃钢仿生雕塑扬州玻璃钢花盆价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化