———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
一、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对象的wheels和speed属性能被外界访问
@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];
}
———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———