Objective-C基础笔记

Objective—C:

 头文件    实现文件

C语言 .h .c
C++语言 .h .cpp
oc语言 .h .m
oc&c++ .h .mm

1.类的申明:
减号方法(普通方法又称对象方法)申明
加号方法(类方法,又称静态方法)申明
本质上就是一个函数

XYZPerson.h文件
@interface XYZPerson:NSObject
-(void)sayHello;
@end

2.类的实现

XYZPerson.m文件
#import "XYZPerson.h"

@implementtation XYZPerson
-(void)sayHello{
    NSLog(@"Hello,World");
}
@end

3.数据类型:万能类型id其实也是一种指针

4.Objective-C中可以使用goto语句

5.实例化对象:
方法一:
People *p1 = [[People alloc] init];
//[类名 方法名]
//[对象名 方法名]
//alloc:方法名-为对象分配内存空间
//init:方法名-进行初始化操作
方法二:
People *p3 = [People new];
//new:是方法

4.const:
是constant的缩写,是不变的意思,用const修饰的变量是其值不能变的变量,我们称之为只读变量
只读变量只是其值不能变,其本身还是变量,不是常量

也可以用const来定义只读数组,表示数组元素是只读的
int const a[5] =  {1,2,3,4,5};
或:
const int a[5] = {1,2,3,4,5};

用const定义指针变量p,是表示指针变量不能变,还是表示指针所指的空间内容不能变,需要按照const修饰的具体对象来确定

5.类内使用成员变量、类外使用属性
属性是为了让类外可以访问成员变量,换句换说是成员变量的外部接口

6.属性:
@property(nonatomic,strong)NSString *peopleName;

属性声明就等于set跟get两个函数
- (void) setName:(NSString *)name;
- (NSString *)getName;

属性既可以用来赋值也可以用来输出打印

属性可以简单的理解为就是get、set方法

7.成员变量写在.h或者.m文件中都可以,毕竟类外不会调用成员变量

8.方法的声明:
- (void)report;
调用:[p1 report];
+ (void)report1;
调用:[People report1];

//-、+是方法的类型,-代表对象方法,用对象名来调用;+代表类方法,用类名调用

减号方法中调加号方法:直接类名调用
    [People report1];
加号方法中调减号方法:首先要实例化
    [[People alloc] report];

加号方法中只能调用静态变量,不能调用成员变量

带参函数声明:
    单个参数:showWithA:
    - (int)showWithA:(int)a;

    多个参数:showWithA: andB:
    - (int)shwoWithA:(int)a andB:(int)b;

    奇葩写法:
    - (int):(int)a :(int)b;
    函数名就是(: :)

9.初始化方法:
- (id)init;
- (instancetype)init;
//id是万能类型,可以返回任意类型而不需要精准的写入
//instancetype是返回当前类型,这个更推荐

自定义初始化方法:
-(instancetype)initWithPeopleName:(NSString *)name andPeopleAge:(int)age;

10.成员变量访问修饰符:
默认是受保护状态(protected)

@public 
//在类外通过对象名->变量名来调用,对象名.变量名调用不到
//在类内类外都可以使用并且可以被继承

@private
//在类内可以使用,类外无法使用,不可以被继承

@protected
//在类内可以使用,类外无法使用,可以被继承

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

方法只在.m文件中写实现,不在.h方法中写声明的话,在.

11.OC没有多继承,如果要实现类似的效果,Java是接口,OC是协议

12.如果父类的方法没有写声明只写了实现,则子类无法继承父类中对应的方法

13.OC中不支持方法的重载,只支持方法的重写

14.成员变量如果写在.m文件里,那么注定了该成员变量为private只能自己才能用
方法也是,如果只在.m文件中实现那么只能自己调用,外部无法调用

15.程序报错的话在控制台搜索reason可以快速定位反馈的错误原因

16.//字符串拼接
NSString *newString = [NSString stringWithFormat:@”%d”,_speed];

17.char cstring = malloc(sizeof(char) 2);
scanf(“%s”, cstring);
NSString *string = [NSString stringWithUTF8String:cstring];

18.重写:只在子类的.m文件中重写方法即可

19.self指针:当前方法是谁在调用,self就是谁

20.OC中.只适用于他的成员属性,set、get方法也可以用.

21.@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) int age;
@property (nonatomic ,assign) float height;
OC对象用strong;其他对象用assign

22.成员属性的访问:
//第一种访问方式
_name = @”zhangsan”;
_age = 30;
_height = 180.0;
//第二种访问方式
self.name = @”zhangsan”;
self.age = 30;
self.height = 180.0;

23.继承和类别的异同:
相同目的:原类都无法完成我们现在的需求,需要更新原类的属性或者方法而扩展
不同点:继承:既能够扩展成员变量和成员属性,也能够添加方法;类别:只能添加方法
继承添加的新方法和新属性,都是在子类中调用;而类别添加的新方法可以在原类对象直接调用

24.类别的.h文件里定义的所有变量都是无效的,并且不允许,成员变量报错,属性不报错,但是也不能用
例如在Person+extention.h里定义

25.一般自定义的一些类会选择继承来扩展,因为可以扩展字段
系统类因为很多字段都是不能添加的,只能扩展方法,所以会选择类别的方式

26.Foundation框架中的基本数据结构:
NSString和NSMutableString(可变字符串)的使用
NSDictionary和NSMutableDictionary(可变字典)的使用
NSArray和NSMutableArray(可变数组)的使用
NSData的使用
NSValue的使用

27.NSMutableString:可变字符串
NSMutableString *str1 = @”hello world”;//这样定义可变字符串是错的
因为这样的话相当于指针指向了一个不可变的内存地址

28.NSArrary:数组
NSArray *arr = [[NSArray alloc]initWithObjects:@”One”,@”Two”,@”Three”,p, nil];
//其中p是自定义Person类的对象
//数组可以存储任意对象
//数组中的每一个对象,其实都是指向对象的地址

29.NSLog打印自定义对象时其实是调用了description方法

30.数组遍历方法:(3种)
//1.枚举遍历法
NSEnumerator *emumerator = [arr objectEnumerator];
id obj;
//注意是一个等号!!
while (obj = [emumerator nextObject]) {
NSLog(@”%@”,obj);
}

    //2.快速遍历法
    for(obj in arr){
        NSLog(@"%@",obj);
    }

    //3.i 遍历,类似于C语言的遍历法
    NSInteger count = [arr count];//得到数组当前元素个数
    id tempObj = [arr objectAtIndex:0];//得到数组指定下标处的值
    NSInteger i = 0;
    for (i; i<[arr count]; i++) {
        NSLog(@"%@",[arr objectAtIndex:i]);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值