一、第一个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-基本语法的更多相关文章

  1. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  2. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  3. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

  4. [Objective-c 基础 - 2.2] OC弱语法、类方法

    A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误   B.类方法 1.是类名调用的方 ...

  5. 【Objective-C】1.oc点语法

    在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量a ...

  6. IOS基础之 (一) OC基础语法

    一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...

  7. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  8. OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

    1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...

  9. OC - 4.OC核心语法

    一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...

  10. iOS开发——OC篇&OC高级语法

    iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...

随机推荐

  1. ASP.NET MVC5--添加验证

    1.在Model类里面添加验证,代码如下: public class Movie { public int ID { get; set; } [StringLength(,MinimumLength= ...

  2. JS 函数--Date()函数

    1.JavaScript没有基本的日期数据类型,所以只能显式的创建Date对象.例如:var myDate=new Date(); 2.为了创建一个存储了特定日期的,或者时间的Date对象,可以简单的 ...

  3. 数论 - 欧拉函数模板题 --- poj 2407 : Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Descri ...

  4. [CLR via C#]11. 事件

    一. 设计要公开事件的类型 如果类型定义了事件成员,那么类型(或类型实例)就可以通知其他对象发生了一些特定的事情. 例如,Button类提供了一个名为Click的事件.应用程序中的一个或多个对象可能想 ...

  5. jquery实现表格中点击相应行变色功能

    对于一个表格,为了使我们选中的项更容易区分,需要为选中项添加高亮,同时也需要,将其他项的高亮形式去除.类似于: <!DOCTYPE html> <html lang="en ...

  6. 数据库表被锁表,select会等待。

    SELECT * FROM dbo.Table_1 WITH(NOLOCK) 这样就可以不用等待,但数据读的是被锁之前的数据,表被锁了,肯定会有对表的update,delete操作. 如果对数据的准确 ...

  7. OC静态库里NSClassFromString得到nil的解决

    如果你在静态库中有从类名反射回类的代码, 如下: NSString *myClassStr = @"myClass"; Class myClazz = NSClassFromStr ...

  8. 使用 Canvas 和 JavaScript 创建逼真的下雨效果

    HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.这里向大家展示一个使用 Canva ...

  9. request.getRequestDispatcher()的两个方法forward()/include()!!!

    RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");请求转发: rd.forward( reques ...

  10. 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)

    先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...