您的位置:首页 > 职场人生

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

2015-07-18 20:29 579 查看
                                            ----------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_#endif6、编译过程1> 编写OC源程序:.m   .c2> 编译:cc -c xxx.m xxx.c3> 链接:cc xxx.o xx.o -framework Foundation  (只有用到Foundation框架才需要引入)4> 运行:./a.out7、BOOLBOOL变量的取值:YES/NO#define YES (BOOL)1#define NO (BOOL)0BOOL变量可以当做整数来使用二、类和对象1、类的声明1)类的设计:1> 类名* 类名的第一个字母必须是大写* 不能有下划线* 多个英文单词,用驼峰标2> 属3> 行为(功能)谁最清楚这个行为,这个行为就应该在哪个类中,该交给谁执行这个行为,由该类决定注:拥有相同(或者类似)属性和行为的对象都可以抽像出一个类#import <Foundation/Foundation.h>// 类的声明// NSOject: 让类具备创建对象的能力@interface Car : NSObject{//@public:让Car对象的wheels和speed属性能被外界访问@publicint wheels;int speed;}// 对象方法必须以-号开头,数据类型用()括住- (void) run;@end2、类的实现用来实现@interface中声明的方法@implementation Car- (void) run{NSLog(@"%d个轮子,%d时速的车跑起来了",wheels, speed);}@end3、创建对象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>漏了@end3>@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];}@endint main(){Car c = [Car new];[c test];[Car test];// 用对象调用类方法,报错// [c run];}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: