oc-基本语法
一、第一个oc程序
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
NSLog(@"Hello, Objective-C");
return 0;
}
运行,控制台输出

二、声明变量使用类型关键字(int/float/long/BOOL/char等)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
int num = 100;
NSLog(@"Number is: %i", num);
return 0;
}
运行,控制台输出

JS中声明变量只用var,无论何种数据类型。
三、块级作用域
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
int num = 100;
if (num > 99) {
int secondNum = 200;
NSLog(@"Number is: %i", num);
NSLog(@"Number is: %i", secondNum);
}
NSLog(@"Number is: %i", num);
NSLog(@"Number is: %i", secondNum); // 错误,编译器会提示
return 0;
}
JS中没有块级作用域。
四、static关键字
前面的局部变量通常都在每次程序进入该局部变量的作用域时分配并在离开时释放。这类存储称为自动存储(默认关键字auto)。
static关键字会在声明变量的时候分配内存,在程序运行期间只分配一次内存。之后再访问时,实际都是在访问原先分配的内存。这适合用于存储创建时使用大量的资源,并且不常改变的局部变量。
void func() {
static Expensive * p = [[Expensive alloc] init];
[p doSomeOp];
}
int main(int argc, const char * argv[])
{
func(); // 第一次调用时创建 p
func(); // 第二次调用,此时p已存在,不会再次创建
return 0;
}
因为全局变量默认位于全局作用域中,所以其行为和静态变量一样。也就是说,它们只分配一次内存,并在整个程序运行期间保持不变。
JS中,未在function内声明的或未使用var声明的变量都是全局变量。
五、const关键字
const同样会修改所声明变量的内存行为,它所修饰的变量是只读的,即第一次初始化后它的值将不能改变。通常用来声明常量。
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
const NSString *str = @"BeiJing";
str = @"ShangHai"; // 会产生一个编译错误
NSLog(@"dd, %@", str);
return 0;
}
JS规范ES6中也增加了const关键字,Firefox/Chrome/Safari的最新版已经支持。node v0.8+ 也支持。
六、结构体
结构体算是一种复合数据类型,对象也是。复合数据类型由基本类型组成。定义结构体使用struct关键字
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
// 定义一个结构体
struct Point {
int x;
int y;
}; // 使用结构体类型
struct Point p1;
struct Point p2; // 赋值使用点操作符
p1.x = 0;
p1.y = 0;
p2.x = 1;
p2.y = 1; // 假设有个写好的函数moveFromTo
moveFromTo(p1, p2); // 从坐标中心点移动到(1,1)点
return 0;
}
JS没有所谓的结构体,但这里的点操作符类似与JS对象取属性操作符。OC对象调用时却不是使用点操作符。
七、类型定义 typedef (type definition)
结构体每次使用时都需要输入struct Point,很无聊。typedef则省去了该步骤,更简洁。
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{
// 定义一个类型
typedef struct{
int x;
int y;
} Point; // 使用类型, 省去了struct
Point p1;
Point p2; // 赋值使用点操作符
p1.x = 0;
p1.y = 0;
p2.x = 1;
p2.y = 1; // 假设有个写好的函数moveFromTo
moveFromTo(p1, p2); // 从坐标中心点移动到(1,1)点
return 0;
}
这里,Point变为了“一等类型”,和int一样在任何地方都可以用。注意,和struct一样定义的是纯数据类型,没有操作(方法)。
JS没有typedef(倒是有一个typeof), JS的function可以来定义一个纯数据(this, prototype挂基本类型)。
八、
oc-基本语法的更多相关文章
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
- OC点语法和变量作用域
OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...
- 李洪强iOS开发之OC点语法和变量作用域
OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...
- [Objective-c 基础 - 2.2] OC弱语法、类方法
A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误 B.类方法 1.是类名调用的方 ...
- 【Objective-C】1.oc点语法
在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量a ...
- IOS基础之 (一) OC基础语法
一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数
1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...
- OC - 4.OC核心语法
一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
随机推荐
- Codeforces Round #313 (Div. 1) A. Gerald's Hexagon
Gerald's Hexagon Problem's Link: http://codeforces.com/contest/559/problem/A Mean: 按顺时针顺序给出一个六边形的各边长 ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现
我在本系列随笔的开始,介绍了CRM系统一个重要的客户分类的展示界面,其中包含了从字典中加载分类.从已有数据中加载分类.以及分组列表中加载分类等方式的实现,以及可以动态对这些节点进行配置,实现客户分类的 ...
- Winform开发框架的重要特性总结
从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特性的加入完善,是经过了很多项目的总结归纳和升华,有些则是根据客户需要或者应用前景的需要进行的完善,整个Win ...
- for循环的嵌套,for循环的穷举迭代
for循环的嵌套 输入一个正整数,求阶乘的和 嵌套 Console.Write("请输入一个正整数:"); int ...
- 获取 Windows Phone 手机系统信息
wpf: <phone:PhoneApplicationPage x:Class="ABSystemInfo.MainPage" xmlns="http://sch ...
- [CLR via C#]16. 数组
数组是允许将多个数据项当作一个集合来处理的机制.CLR支持一维数组.多维数组和交错数据(即由数组构成的数组).所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Obj ...
- asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法
MVC中表单form是怎样提交? 控制器Controller是怎样接收的? 1..cshtml 页面form提交 (1)普通方式的的提交
- 才知道百度也提供了智能DNS服务 - 加速乐
http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...
- 内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统
linux内核最小系统,使用内核版本:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.1.tar.bz2 1,FL2440板子的基本硬件: ...
- ahjesus解决win下U盘无法写入的问题
可能是由于不同品牌的U盘出厂时磁盘分区和格式化方式不同而引起的兼容性问题.解决方案如下 启动cmd.输入diskpart,启动DISKPART工具 在DISKPART窗口中输入以下命令: >li ...