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? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
随机推荐
- JS 的 call apply bind 方法
js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[, [,.argN]]]] ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- 批量插入数据 C# SqlBulkCopy使用
转自:http://blog.csdn.net/wangzh300/article/details/7382506 private static void DataTableToSQLServer( ...
- csharp: Export or Import excel using MyXls,Spire.Xls
excel 2003 (效果不太理想) using System; using System.Collections.Generic; using System.ComponentModel; usi ...
- [PE结构分析] 9.导出表 IMAGE_EXPORT_DIRECTORY
typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // 未使用,总为0 DWORD TimeDateStamp; // 文 ...
- 媲美oracle awr/statspack的mysql awr第一版发布
现发布alpha版mysql awr,其提供的特性类似于oracle awr或statspack+集中式监控.对于原来从事oracle dba或者相关运维的人原来说,这会是个不错的选择. 至于我为什么 ...
- Q:关于Outlook for CRM 中预览记录窗体的设置
问题: 如何在Outlook for CRM中,将实体记录的预览窗口的信息做调整? 解决方案: 在Outlook里,在打开实体后选择View=>Customize Reading Pane,这里 ...
- andriod GridView
<?xml version="1.0" encoding="UTF-8"?> <GridView xmlns:android="ht ...
- EL表达式概述
E L(Expression Language) 目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ...
- UITabBarController 微信
AppDelegate.m #import "AppDelegate.h" #import "FirstViewController.h" #import &q ...