Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Geoff的Object-C学习笔记 #9

Open
GeoffZhu opened this issue Mar 12, 2018 · 0 comments
Open

Geoff的Object-C学习笔记 #9

GeoffZhu opened this issue Mar 12, 2018 · 0 comments

Comments

@GeoffZhu
Copy link
Owner

语法篇

基础数据类型

int、float、double、char

int i = 0;
float i = 0.1;
doublle i = 0.1;
char i = 'A';

OC同时支持C语言的字符串

'C语言字符串'
NSSting: @"OC字符串"

变量名是大小写敏感的

限定词

用于对变量限定内存分配大小,关键词如下

long、long long、short、unsigned、signed

// 原本int是32位,通过限定词,扩展为64位,能存放更大的数据,long long同理
long int i
// 如果你只想存个状态码,不需要太大的整数,可以使用short,会得到16位的int变量
short int i

unsigned和signed代表有没有符号,也就是该变量有没有正负号

条件语句和循环语句

条件语句和循环语句中与js完全一致,不在赘述

goto语句

int i;
a:{
   i++ 
}
if (i < 5) goto a;

函数的定义与调用

<!-- 返回值类型(无使用void) + 名字 + (参数类型 参数名)-->
double multiplication (double a, double b) {
    double c = a * b
    return c
}

mutiplication(2.0, 3.0)

NSLog方法,浮点型采用%f输出,整型采用%d输出,字符串采用%s输出,例如

int a = 0;
float f = 0.1; 或 double f = 0.1;
char s = '字符串';
NSString *p = @"NS字符串";

NSLog(@'整型输出:%d', a);
NSLog(@'浮点型输出:%f', f);
NSLog(@'字符输出:%s', s);
NSLog(@'指针地址输出:%p', p);

%@ 打印NSString

面向对象语法

定义一个类

// 引入Foundation头文件,其中包括常见的NSObject, NSString等类。
#import <Foundation/Foundation.h>

// 其中的 : 代表继承的意思,也就是Class1继承自NSObject
@interface Class1 : NSObject

@end

调用类的方式

[类名 方法名]
[对象名 方法名]

// 初始化People类的一个实例p1
People *p1 = [[People alloc] init];
类的成员变量和属性
@interface Class1 : NSObject
{
    // 成员变量,这个例子是写在了.h文件中,不过已经推荐把成员变量写在.m文件中了
    int i = 0;
    NSString *peopleName
}

@property (nonatomic, strong) NSString *peopleName;
@end

如果声明了一个名为peopleName的属性,xcode会在类内自动创建一个名为_peopleName的成员变量。

对象方法和类方法

OC中定义类中的方法分为减号方法和加号方法,减号方法相当对象方法,也就是JavaScript中的Vue.prototype.fun1, 而加号方法被称为类方法(静态方法),类似于javascript中的Vue.nextTick

// 在.h文件中,声明对象上的方法,例如

-(id) initWithID:(int)newID andAge:(int)newAge andPrice:(float)newPrice;

-(返回值) 函数名: (参数类型1) 参数名1 标签1: (参数类型2) 参数名2 …{ 
    函数内容; 
}

+(void) nextTick;

在.m文件中实现类方法的时候还需要注意,类方法中不能调用成员变量。

再来说说带参数调用,例如调用上面的initWithID方法

People *p1 = [[People alloc] init];
[p1 initWithID:1 andAge:10 andPrice:100.0;
// 调用类方法
[People nextTick]

返回值中的id类型和instanceof类型,id类型可以返回任意类型的值,instanceof类型只能返回当前定义的类的实例类型,这在重写NSObject的init方法时经常使用。

访问修饰符

成员变量访问修饰符

@private
私有,只能在类内(.m文件)使用,无法被继承

@protected
受保护,只能在类内使用,可以被继承

@public
公有,能在类内也能在类外使用,使用语法为 ->,例如:
p1 -> varOfPublic

@package
框架权限,在框架内相当于受保护,框架外相当于私有

方法的访问修饰符

OC中方法没有访问修饰符,如果你不想让某个方法在类外被使用,可以直接在.m文件中定义这个方法,外部自然无法调用。

继承与多态

没有多继承,如果想使用多继承的话,要使用协议。继承的语法在上文中也已经出现了

// Class1 集成自NSObject,Foundation的头文件中有NSObject
#import <Foundation/Foundation.h>
@interface Class1 : NSObject
@end

OC中的多态,OC中可以重写方法,但被重写方法的参数和返回值必须要与父类中的一致。换做术语来说就是,OC只支持方法重写,但不支持方法重载。

self与super

这两个都是在类的实现文件中使用的
super为父类,可以调用父类的方法
self为当前类,可以调用当前实现类中的方法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant