Day1 Objective-C学习记录

Hello World代码学习

#import <Foundation/Foundation.h> 
int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
    // insert code here... 
    NSLog(@"Hello, World!"); 
    } 
    return 0; 
}
  1. 与C语言的区别 增加了面向对象的语法 将C的语法封装的更简单 OC完全兼容C语言
  2. OC的源文件后缀名:.m。m-->message, 代表OC中最重要的一个机制:消息机制。

  3. #import指令,是一个预处理指令,同一个文件无论import多少次,只会包含一次。

  4. main函数是程序的入口和出口,int类型的返回值代表程序的结束状态。

  5. Foundation框架 框架:是一个功能集,即一些函数和类的集合。
    Foundation框架提供了最基础的功能,例如输入输出,一些数据类型。

  6. @autoreleasepool 自动释放池

  7. NSLog()
    Foundation框架里的函数
    作用:向控制台输出信息,输出信息还包括一些调试相关信息:执行这段代码的时间、程序的名称、进程编号、线程编号。
    语法: NSLog(@"格式控制字符串",变量列表)

NSString

NSString类型的指针变量,专门用来存储OC字符串的地址。

OC的字符串必须写一个前缀@,例如:@"sddq"

NSString *str = @"jack"; 
NSLog(@"我是%@",str);

@:

  1. 将C字符串转换为OC字符串:"jack"-->@"jack"
  2. OC中的绝大部分关键字都是以@符号开头

用命令行编译链接一个程序:

cd /Users/bytedance/Desktop/hig/hig/code 
touch main.m //创建.m文件 
cc -c main.m //编译 此命令执行完生成main.o文件 
cc mian.o //链接 
如果程序中使用到了框架中的函数或者类,必须告诉编译器去哪个框架中找这个函数或者类: 
cc main.o -framework Foundation 执行完会生成a.out文件 
./a.out

源文件:xx.m 目标文件:xx.o 可执行文件:xx.out 

面向过程:后期的维护和修改不方便
面向对象:后期的维护和修改十分方便

OC数据类型

支持C中的所有数据类型

  1. 基本数据类型:short,int,long,long long,float,double,char
  2. 构造类型:数组、结构体、枚举。
  3. 指针类型: int *p1
  4. 空类型:void
  5. 自定义类型typedef:

新增数据类型

  1. BOOL:YES或NO(实际上就是1或0) 常用来存储条件表达式的结果 对比:bool :true/false

  2. Boolean:true/false 用于存储条件表达式的结果 本质:unsigned char类型 Boolean b1 = false --> unsigned char b1 = 0
    绝大多数情况下用BOOL。

  3. Class 类

  4. id指针 万能指针

  5. nil

  6. SEL 方法选择器

  7. block 代码块

类与对象

类的声明:

  1. 位置:直接写在源文件中,不要写在main函数中

  2. 语法: @inteface 类名:NSObject{
                                        属性,属性的名字必须要以下划线开头,e.g.,_name
                     }
                    方法的声明
              @end

类的实现:

  1. 语法:
    @implement
         方法的实现
    @end

  2. 注意点

    1. 类名的每一个单词的首字母大写

    2. 创建对象:类名 *对象名 =[类名 new]

    3. 默认情况下对象的属性不允许外界直接访问,如果允许对象的属性直接被外界访问,要在声明属性的时候加上@public

    4. 访问对象属性的方式:
      给属性赋值:对象名->属性名 = 值
      调用对象属性:对象名->属性名
      或者用(*对象名).属性名

方法

方法的声明:

  1. 位置:@interface大括号外边

  2. 语法:- (返回值类型)方法名称:(参数类型)行参名称;
                 -(void)eat:(NSString *)foodName;
                多参数方法:- (返回值类型)方法名:(参数类型)行参名1 :(参数类型) 行参名2 :(参                数类型)行参名3;
                -(int)sum: (int)num1 :(int)num2;

方法的实现:

  1. 位置:在@implementation之中实现

  2. 语法:将方法的声明中的分号去掉,换成大括号,将方法的实现写在大括号中

方法的调用:

  1. 先创建对象,通过对象调用方法。

  2. 语法:[对象名 方法名:实参1 :实参2 :实参3];

NULL与nil

NULL
只能作为指针变量的值,如果一个指针变量的值为NULL,表示该指针不指向内存中的任何空间

Nil
只能作为指针变量的值,如果一个指针变量的值为NULL,表示该指针不指向内存中的任何空间

NULL和nil其实是一样的

使用建议:

  1. C指针用NULL

  2. OC指针用nil:Person *p1 = nil;
    ​​​​​​​                     如果Person类的指针为nil,代表这个指针不指向任何对象。 此时如果通过这个指针p1访问这个指针指向的对象的属性,会运行报错 如果通过这个指针p1访问这个指针指向的对象的方法,运行不会报错,但是方法不会执行,没有任何反应。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值