黑马程序员.............OC基础语法

----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

一、OC基础语法
1、关键字
OC的关键字基本上都是以@开头的:
@interface、@implementation、@end
@public、@protected、@private、@selector
@try、@catch、@throw、@finally
@protocol、@optional、@required、@class
@property、@synthesize、@dynamic
self、super、id、_cmd、__block、__strong、__weak
 
2、字符串以@开头
例:C语言中字符串"hello"在OC中为@"hello"
 
3、数据类型
基本数据类型:char、int、float、double、BOOL(YES\NO)
 
4、NSLog和printf的区别
 
1> NSLog接收OC字符串作为参数,printf接受C语言字符串作为参数。
2> NSLog输出后会自动换行,printf输出后不会自动换行。
3> 使用NSLog需要#import <Foundation/Foundation.h>,
使用printf需要#include <stdio.h>。
 
5、Foundation框架
#import <Foundation/Foundation.h>
 
1> Foundation框架的主头文件名称就是Foundation.h
2> 只需要包含Foundation框架主头文件,就可以使用整个框架的东西
 
#import作用

#include一样,用来拷贝某个文件的内容
 
可以自动防止文件内容被拷贝多次,头文件中不用加入下面的预处理指令

#ifndef _STDIO_H_

#define _STDIO_H_

#endif


6、编译过程

1> 编写OC源程序:.m   .c

2> 编译:cc -c xxx.m xxx.c

3> 链接:cc xxx.o xx.o -framework Foundation

  (只有用到Foundation框架才需要引入)

4> 运行:./a.out


7、BOOL

BOOL变量的取值:YES/NO

#define YES (BOOL)1

#define NO (BOOL)0

BOOL变量可以当做整数来使用


二、类和对象

1、类的声明

1)类的设计:

1> 类名

* 类名的第一个字母必须是大写

* 不能有下划线

* 多个英文单词,用驼峰标

2> 属

3> 行为(功能)

谁最清楚这个行为,这个行为就应该在哪个类中,

该交给谁执行这个行为,由该类决定

注:拥有相同(或者类似)属性和行为的对象都可以抽像出一个类

#import <Foundation/Foundation.h>

// 类的声明

// NSOject: 让类具备创建对象的能力

@interface Car : NSObject

{

//@public:Car对象的wheelsspeed属性能被外界访问

@public

int wheels;

int speed;

}

// 对象方法必须以-号开头,数据类型用()括住

- (void) run;

@end


2、类的实现

用来实现@interface中声明的方法

@implementation Car

- (void) run

{

NSLog(@"%d个轮子,%d时速的车跑起来了",wheels, speed);

}

@end


3、创建对象

int main()

{

// 利用类来创建对象

// [执行者 行为名称]

// 定义一个指针变量C,指向Car类型的对象

Car c = [Car new];

//给c指向对象的属性赋值

c -> wheels = 3;

c -> speed = 100;

// 执行c的run方法

[c run];

// [Car new]每次都会创建一个新对象

Car c2 = [Car new];

}


4、常见错误

1> 只有类的声明,没有类的实现

2>漏了@end

3>@interface和@implementation嵌套

4>两个类的声明嵌套

5>成员变量没有写在括号里面

6>方法的声明写在了大括号里面



三、方法

1、方法与函数

方法:

1> 对象方法都以-开头

2>对象方法的声明必须写在@interface和@end之间,

对象方法的实现必须写在@implementation和@end之间

3> 对象方法只能由对象调用

4> 对象方法归类和对象所有

函数:

1>函数能写在文件的任意位置(@interface和@end除外),

函数归文件所有

2> 函数调用不依赖于对象

3> 函数内部不能直接通过成员变量名访问某个成员变量


2、OC方法使用注意

方法名:

1> 同一个对象中,不允许2个对象方法同名

2> 一个参数对应一个冒号,冒号也是方法名的一部分

方法:

1> 成员变量不能在{}中初始化

2> 成员变量/方法不能用static等关键字修饰,别跟C语言混在一起

3> 方法只有声明,没有实现

程序崩溃,闪退

4> 方法只有实现,没有声明

编译器警告,但能调用(OC弱语法)

5>编译的时候:如果访问了不存在的成员变量则直接报错;

如果访问了不存在的方法,仅仅只是警告

// 计算和的方法

// 方法声明

- (double)sumOfNum1:(double)num1 andNum2:(double)num2

// 方法实现

- (double)sumOfNum1:(double)num1 andNum2:(double)num2

{

return num1 + num2;

}


3、方法分类

1> 类方法

格式:[类名 方法名];

特点:

1)以+开头

2)只能用类名调用

3)不能访问成员变量

好处:不依赖于对象,执行效率高

使用场合:方法内部不需要成员变量时

2> 对象方法

格式: [对象名 方法名];

特点:

1)以-开头

2)只能让对象调用

3)可以访问成员变量

注:类方法和对象方法可以重名

#import <Foundation/Foundation.h>
@interface Car : NSObject
{
int speed;
}
+ (void)run;
+ (test);
- (test);
@end
@implementation Person
+ (void)run
{
// 类方法中不能访问speed变量
NSLog(@"车跑起来了");
}
+ (void)test
{
NSLog(@"test类方法");
// 死循环
// [Car test];
}
- (void)test
{
NSLog(@"test对象方法");
[Car test];
}
@end
int main()
{
Car c = [Car new];
[c test];
[Car test];
// 用对象调用类方法,报错
// [c run];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值