出于安全因素考虑,iOS严格的将各个App分别存放在文件系统的独立位置,这样的机制称为沙盒(SandBox)。这样,每一个App的文件都被安全地保管起来,别的App无法访问。App也无法对沙盒以外的文件系统,包括系统文件进行访问。
在App安装过程中,系统为每个App生成它的主目录和一些关键的子目录,通常的路径为:
/ApplicationRoot/ApplicationID/
App包(Application Bundle)
在编译App时,Xcode将它整理为一个包(Bundle)。App包是文件系统中的一个目录,将相关的文件都集中到一个地方。App包里主要包括了App的可执行文件和资源文件等。
App包的典型成份:
- MyAp
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
p.app 可执行文件
-
Icon.png App图标
-
MainWidow.nib 主窗口xib文件
-
Default.png 加载时图片
-
iTunesArtwork iTunes图片
-
Info.plist 配置文件
-
Resource files 资源文件
Info.plist:
限制条件
-
显示面积
-
尽可能少而紧凑的界面元素
-
足够大的交互控件
-
文件大小
-
有限的存储空间
-
下载的时间和费用
-
资源加载速度
-
内存空间
-
128M,更少的程序运行空间
-
内存管理和优化
-
避免过高质量的图片和音频
-
运行限制
-
一次只有一个前台程序
-
不可开发后台运行的程序
-
程序运行时间不得超过5秒钟
-
数据访问
-
不能使用其他App中的静态类库
-
不能访问沙盒以外的任何文件,也不能把沙盒内的文件共享出去
-
可以通过特定的API访问一些系统资源,如图片库、地址簿等
-
在有网络链接时可以访问网络资源
-
能量消耗
-
CPU负载
-
发热,电池消耗过快
-
算法优化
-
用户使用习惯
-
快速启动,短暂使用
-
随时可能退出
-
避免多余的“帮助”
-
自动保存
Hello,There App
1.Create a new Xcode project:
2.Single View Application
3.Options for new project:
4.选择项目存放路径,然后生成了如下的项目结构:
5.然后编辑Main.storyboard(故事板?),选择ViewController
6.拖动Lable对象到Main.storyboard上面,双击可以编辑,改成我们需要的文字即可
运行效果:
2015-04-15
-
iOS模拟器不支持依赖于硬件的特性,如加速计和摄像头功能。也不支持将d应用程序下载到实际的iOS设备中,也不能在AppStore上分发应用程序。
-
注册iOS开发者:
-
99美元/年
-
299美元/年
-
Cocoa Touch使用的是Objective-C 2.0,但该语言的一个关键特性在iOS中并不可用:垃圾回收。
2015-04-17
-
OC是在C语言的基础之上,增加了一层最小的面向对象语法。因为OC是基于C语言的,所以完全兼容C语言,甚至C++
-
OC没有包名(命名空间)的概念,开发人员给类名加上前缀,放置类名冲突
-
为了防止与C语言、C++关键字冲突,OC关键字都以@开头。
-
语法要点:
-
基本数据类型:char,int,float,double,BOOL(YES\NO)
-
nil相当于Java中的null
-
self相当于Java的this
-
for循环快速遍历fot(xx in xx)
-
基类 NSObject
-
继承:单继承,用super关键字引用父类对象
-
异常处理 @try @catch @finally
-
注释: // 和 /……/
-
日志输出:NSLog{@”Hello”}; NSLog{@”Age is %i”,23};
第一个OC程序:
Automatic Reference Counting(ARC)自动加释放内存代码
- import相比include,防止重复包含。include的头文件(*.h)里需要添加:
#ifndef ___OC___Header_h
#define ___OC___Header_h
#endif
import不需要添加以上代码。
1.OS X>Application>Command Line Tool
2.Type:Founction
3.代码
4.运行效果
-
OC类包含两个文件:
-
.h 类的声明文件,用于声明变量,方法(函数)
-
.m 类的实现文件,用于实现.h中的方法
-
类的声明使用关键字 ‘@interface @end
-
类的实现使用关键字@implementation @end
-
新建一个OC类:
1.右键Project,New File,然后iOS>Cocoa Touch>Objective-C class
2.输入类名,继承父类NSObject
3.生成代码ZMSClass.h和ZMSClass.m:
4.OC用冒号(:)表示继承,如:
/*
- ZMSClass.h
*/
#import <Foundation/Foundation.h>
@interface ZMSClass : NSObject{
// 成员变量定义到大括号之内
int number;
//float time;
}
// 静态方法(+):用类名调用的方法;
// 动态方法(-):用对象调用的方法
// number的Get方法,不实现
- (int)number;
// - (float)time;
// number的Set方法,不实现
- (void)setNumber:(int)newNumber;
// - (void)setNumber:(int)newNumber setTime:(float)newTime;
@end
-
OC在.h中声明的所有方法都是公共的
-
OC中一个冒号对应接收一个参数
/*
-
ZMSClass.m
-
/
#import “ZMSClass.h”
@implementation ZMSClass
- number{
NSLog(@“调用了number的get方法”);
return number;
}
// -time{
// NSLog(@“调用了time的get方法”);
// return time;
//}
- (void)SetNumber:(int)number{
number = newNumber;
NSLog(@“调用了number的set方法”);
}
// - (void)setNumber:(int)newNumber setTime:(float)newTime{
// number = newNumber;
// time = newTime;
// }
@end
-
创建一个ZMSClass对象:
-
1.调用一个静态方法+(id)alloc来分配内存,用指针进行接收
-
2.调用一个动态方法-(id)init进行初始化
/*
-
main.m
-
/
#import <Foundation/Foundation.h>
#import “ZMSClass.h”
int main(int argc, const *argv[])
{
@autorelasepool{
// 用指针存储对象的地址
ZMSClass *zms = [ZMSClass alloc];
zms = [zmsClss init];
// 以上两行可以简写为:
// ZMSClass *zms[[ZMSClass alloc] init]
[zmsClass setNumber:55];
int number = [zms number];
NSLog(@“Number is %i”,number);
[zms SetNumber:555 setTime:555.55];
NSLog(@“Number is %i and time is %f”,[zms number],[zms time]);
// 释放对象
[zms release];
}
return 0;
}
import导入*.h,系统的
<>
,自写的用
“”
- OC中get方法建议和成员变量名一样
2015-04-20
-
属性就是让类外可以访问成员变量
-
类内使用成员变量,类外使用属性
// People.h
#import <Foundation/Foundation.h>
@interface People : NSObject
{
// 推荐成员变量加_,Xcode新版本不需要再在.h文件中写成员变量
NSString * _peopleName;
int _peopleAge;
int _peopleSex;
}
@property(nonatomic,strong)NSString *peopleName;
@end
- 属性的使用:
// main.m
People *people = [[People alloc]init];
perople.peopleName = @“周木水”;
NSLog(@“peopleName - %@”, people.peopleName);