简介:
这是一门面向对象编程:
面向对象快速总结:
最重要的核心是:对象把状态和行为包含在一个class里面
.m是Object-C已编译类的后缀
What is ios?
ios系统的Unix操作系统,基于BSD的Unix版本
Cocoa Touch
触控应用层,是UI层,包括:
- Multi-Touch
- Alerts
- Core Modtion
- Web View
- View Hierarchy
- Map Kit
- Localization
- Image Picker
- Controls
- Camera
为什么叫Cocoa Touch呢?
这里的API最初是为了Mac OS X开发的,它叫Cocoa,之后当它们被适用于IOS,很多API能够在两个平台之间共享,Cocoa Touch显然是Cocoa的触控版本。
Media
媒体层,包括:
- Core Audio
- JPEG,PND, TIFF
- OpenAL
- Audio Mixing
- Quartz(2D)
- Audio Rccording
- Core Animation
- Video Playback
- OpenGL ES
Core Services
核心服务层,是面向对象的一层,包括:
- Collections()
- Core Location
- Address Book
- Net Services
- Threading
- File Access
- Preferences
- SQLite
- URL utilities
Core OS:
核心操作系统层,是很接近硬件的一层,大多数API都是用C写的,包括:
- OSX kernel
- Power Management(电源管理)
- Mach 3.0
- Keychain Access
- BSD
- Certificates(证书)
- Sockets(套接字)
- File System(文件管理)
- Security(安全管理)
- Bonjour(一种网络)
平台开发工具篇
Tools:
- Xcode
- Instruments
Language
-
Object-C:它使用方括号和冒号,消息调用没有圆括号,参数不是放在圆括号里。Object-C是C语言的严格超集,C中可以做的事情,Object-C里面也可以做。
-
Object-C和Java,C++不同的一个很大特性是Properties(属性):属性是访问实例变量的方式。
-
属性实际上是一个setter和一个getter方法,所有的实例变量的访问都是如此。通过setter方法设置值,通过getter方法获取值。
-
.h是一个公共的API,而.m是一个私有的实现。
-
在公共API中,必须说明父类是谁,你不能将父类保密。
-
在.h文件中,格式如下:@interface 类名(这必须和文件名一致): NSObject,底部有@end。其中,NSObject是Fundation框架中的一个类,它是IOS每一个类的基类。换句话说,它是每一个类最终的父类,一切都是从NSObject中继承。通常我们不会导入import <Fundation/NSObject.h>,而是导入import <Fundation/Fundation.h>整个框架,从ios7开始可以使用import Fundation;意味着我们可以使用Fundation中的所有公共类,因为向上兼容,所以<Fundation/Fundation.h>还可以使用。
-
在.m文件中,格式如下:@implementation 类名(这必须和文件名一致),底部有@end。这里不需要指定父类, 因为它只需要指定一次,而它是公共的,所以是在头文件中。
-
至于如何声明一个属性?@property (strong) NSString *content s,其中@property会声明每一个contents所需要的空间,在OC中所有的对象都在堆中,其中,(堆:也就是分配闲置内存的地方where allocate free memory,所有的对象都在这里,OC会替你管理所有的这些存储)strong:属性是强的, (所有的指针的 属性,要么是强,要么是弱,OC知道如处理内存和堆)只要一个对象被强引用,会被引用计数。OC中会对每一个指向堆中对象的强指针进行追踪,只要有一个强指针存在,它就会把它留在堆中,只有没有强指针存在,它才会从堆中释放内存,立即释放。这个在OC中叫自动引用计数,weak,属性的弱的,weak指针会告诉OC有一个指针指向堆中的这个内存,只要还有强指针指向它,就将它留在内存当中,只要不在有强指针指向它,内存将立刻被释放,此时的弱指针会被置为nil,nil表示这个指针不再指向任何东西。
-
@property (strong, nonatomic) NSString *contents; nonatomic的意思是声明同该属性一同的setter和getter方法不是线程安全的,你不能有两个线程,同时尝试设置改属性,因为IOS中的多线程不是多线程在设置的一个对象,我们通常有一个运行在另外一个线程的一组对象,例如你的模型,nonatomic通常用于多线程。
@synthesize contents = _contents; - (NSString *)contents { return _contents; } - (void)setContents:(NSString *)contents { _contents = contents; }
-
_contents是实例化变量的名字,属性contents将存储在这里 ,"-"负号这里表示这是一个方法,synthesize将为实力创建空间
-
C语言的原始类型没有存储在堆中。
-
OC中,.点符号只用于properties,这是调用setter和getter方法,使用点符号。 根据左值和右值来分别调用setter和getter方法。self也就是这段代码正在起作用的实例,
-
==等号比较的是指针,而不是比较指针所指的内容。
FrameWork(框架)
常见的有:
- Fundation框架,所有的核心服务都在这里,例如数字,字典,所有这些
- UIKit框架
- Core Data框架
- Map kit框架,地图
- Core Motion框架,陀螺仪和加速计
Design Strategies(设计策略)
MVC(Model,View,Controller):是一种将应用中的所有类组织起来的策略,这里我们会将所有的类归到三块中,也就是模型,控制器, 视图
控制器:将模型数据用到视图当中,然后显示到屏幕上
那么,怎么知道哪个类是属于哪一块呢?
实际上,模型实际考虑的是“什么”的问题,程序是什么,模型是独立于UI存在,控制器控制如何呈现在屏幕上。而视图是控制器要使用的类,
面向对象中协议:协议是一种同另一种对象通信的盲方式。