iOS学习笔记1——OC基础

OC语言基础

OC与C

OC完全兼容C, 所以可以在OC程序中编写C语言代码,并且可以将C语言的源文件和OC的源文件组合在一起生成可执行文件。

printf与NSLog的区别

  1. NSLog会自动换行
  2. NSLog在输出内容时会附加一些系统信息(含有对象的内存地址)
  3. NSLog和printf接收的参数不一样
   printf("c hello world\n");
   NSLog(@"OC hello World");

函数和方法的区别

  1. 函数属于整个文件, 方法属于某一个类
    方法如果离开类就不行
  2. 函数可以直接调用, 方法必须用对象或者类来调用
    注意: 虽然函数属于整个文件, 但是如果把函数写在类的声明中会不识别
  3. 不能把函数当做方法来调用, 也不能把方法当做函数来调用

方法的注意点

方法可以没有声明只有实现
方法可以只有声明没有实现, 编译不会报错, 但是运行会报错
如果方法只有声明没有实现, 那么运行时会报:
reason: '+[Person demo]: unrecognized selector sent to class 0x100001140’
发送了一个不能识别的消息, 在Person类中没有+开头的demo方法
reason: '-[Person test]: unrecognized selector sent to instance 0x100400000’

类也有一个注意点:
类可以只有实现没有声明
注意: 在开发中不建议这样写

初学常见报错情况

 //    1.只有类的声明,没有类的实现
 //    2.漏了@end
 //    3. @interface和@implementation嵌套
 //    4.成员变量没有写在括号里面
 //    5.方法的声明写在了大括号里面
 //    6.成员变量不能在{}中进行初始化、不能被直接拿出去访问
 //    7.方法不能当做函数一样调用
 //    8.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
 //    9.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
 //    10.C函数不能访问OC对象的成员
 //    11.低级错误:方法有声明,但是实现的时候写成了函数
 //    12.OC可以没有@interface同样可以定义一个类

#pragma mark的使用

#pragma mark - 类1
……
#pragma mark - 类2
……
#pragma mark - 类3
……

OC面向对象概念

 1.什么是面向对象?
 找对象使用对象的方法(功能)
 
 2.对象
 3.什么是类?
 类就是用于描述对象的共性特征
 主要用于描述对象的属性和行为
 
 4.如何定义一个类
 4.1类的声明
 声明类的目的: 告诉系统我们这个类中有哪些属性和方法
 类名: 首字母大写
 : NSObject 为了让我们的类具备创建对象的能力, 也就是可以使用new方法
 @interface 类名 : NSObject
 {
    属性; // 属性必须写到{}中, 属性名称以_开头
 }
 方法; // 方法必须写到{}外面
 @end
 
 4.2类的实现
 @implementation 类名
 
 方法的实现
 
 @end
 
 5.如何创建对象
 要想创建对象必须给类发送一个new消息, 调用类的new方法
 
 >开辟存储空间
 >初始化属性
 >返回地址
 类名 *p = [类名 new];
 
 5.1如何发送消息?  [类名/对象 方法名称]
 
 
 6.修改对象的属性和获取对象的属性
 因为类的本质是一个结构体, 所以我们是用一个指向结构体的指针保存了对象的地址, 所以我们可以通过指针操作结构体的方式来操作对象
 p->属性名称 = 值;  // 对象的属性默认是受保护的, 必须把属性变为公开的才可以直接访问@public
 NSLog(@"age = %i", p->age);
 
 7.类中可以定义两种方法
 7.1对象方法
    以-开头
    可以直接访问对象的属性
    必须使用对象调用
    
    对象方法中可以直接调用其它对象方法
    对象方法中可以直接调用类方法
 
 7.2类方法
    以+开头
    不可以直接访问对象的属性
    必须使用类调用
    
    类方法中不可以直接调用对象方法
    类方法中可以直接调用类方法
 
 7.3方法定义的注意点
    方法名采用 驼峰命名
    方法中的数据类型都必须使用()括起来
    方法中每个参数的数据类型前面都必须加上:
    :也是方法名的一部分

NString基本使用

int main(int argc, const char * argv[]) {
   
    
    /*
    // C语言中的字符串不是对象
    char *name1 = "lnj";
    char name2[] = "lmj";
    
    // OC中的字符串是一个对象
    // 正是因为OC中的字符串是一个对象, 所以它就具备了很多功能
    NSString *str = @"lk";
    
    Iphone *p = [Iphone new];
    // 注意: 输出C语言的字符串使用%s
    //      输出OC的字符串使用%@,  %@就专门用于输出对象类型的
//    NSLog(@"content = %s", [p loadMessage]);
    NSLog(@"content = %@", [p loadMessage]);
     */
    
    // 1.如何创建OC字符串
//    NSString *str = @"lnj";
    
//    printf("age = %i, height = %f\n", 30, 1.75);
//    NSString *str = [NSString stringWithFormat:@"age = %i, height = %f\n", 30, 1.75];
//    NSLog(@"str = %@", str);
    
    // 2.如何计算字符串的长度
//    char name[] = "lnj"; // l n j \0
    char name[] = "李";
    
    // 包含\0
    size_t size = sizeof(name);
    printf("size = %lu\n", size);
    
    // 不包含\0
    size_t length = strlen(name);
    printf("length = %lu\n", length);
    
    // 不包含\0的
    // 计算出来的是个数, 而不是占用的字节数
//    NSString *str = @"lnj";
    NSString *str = @"李南江";
    NSUInteger len = [str length];
    NSLog(@"len = %lu", len);
    return 0;
}

修改项目模板

/*
 修改项目模板以及main函数中的内容
 /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line Tool.xctemplate/
 
 修改OC文件头部的描述信息
 /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate
 
 */

/*
 Xcode文档安装的位置1:
 /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
 注意: 拷贝之前最好将默认的文档删除, 因为如果同时存在高版本和低版本的文档, 那么低版本的不会显示
 Xcode文档安装的位置2:
 /Users/你的用户名/Library/Developer/Shared/Documentation/DocSets
 如果没有该文件夹可以自己创建一个
 
 */

匿名对象

// .h和.m之间切换快捷键 command + control + ⬆️

int main(int argc, const char * argv[]) {
   
   // 匿名就是没有名字, 匿名对象就是没有名字的对象
   
   // 1.有名字的对象
   // 只要用一个指针保存了某个对象的地址, 我们就可以称这个指针为某个对象
   // 称p为Person对象
   Person *p =[Person new]; // 0ffc12
   p->_age = 30;
   p->_name= @"lnj";
   [p say];
   /*
    0ffc12->_age = 30;
    0ffc12->_name= @"lnj";
    [0ffc12 say];

    */
   
   // 2.没有名字的对象
   // 无论有没有名字, 只要调用new方法都会返回对象的地址
   // 每次new都会新开辟一块存储空间
   [Person new
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值