iOS开发之OC入门(常用关键字)

OC中的常见关键字

  • C语言基本数据类型:int double float char
  • 构造类型:数组 结构体 枚举
  • 指针类型:int *pl
  • BOOL类型:可以存储YES或者NO
  • Boolean:存储true或者flase
  • class类型
  • id类型:万能指针
  • nilNULL在语义上等价
  • SEL 方法选择器
  • block代码段
  • #import#include指令的增强版,预处理指令

NSLog函数

  • printf函数的增强版
  • 输出一些相关的调试相关信息:代码执行时间、程序名称、进程编号、线程编号、输出的信息
  • 自动换行
  • 使用注意:加@,最后加\n会自动失效
	NSlog(@"hello!")
	float f1 = 12.12f;
	NSlog(@"this is %f",f1)

NSLog函数占位符

  • %p打印指针的值
  • %@打印指针对应的值,输出的格式:<对象所属的类名:对象的地址>
  • NSLog%@方法调用传入对象的description的方法,拿到该方法的返回值,这个返回值是一个字符串,将其输出
  • description方法是定义在NSObject类之中,所以每一个OC对象都有这个方法
  • 可以通过改写该方法,自定义输出的值

分组导航标记

 #pragma mark 分组名
  • 就会在导航栏对应的位置显示标题
 #pragma mark 
  • 就会在导航栏对应的位置显示分割线
 #pragma mark - 分组名
  • 就会在导航栏对应的位置显示分割线再显示标题

多文件开发

  • 1个类写在1个模块之中,1个模块至少包含两个文件
  • .h头文件:写类的声明,需要引入Foundation框架
  • .m实现文件:写上类的实现,引入该模块.h头文件
  • NewFile Cocoa class 可以自动生成模块文件(两个)

异常处理

	@try { // 不能捕获C语言的错误
	// 可能发生错误的代码
	} @catch(NSException *ex) {
	// 错误时执行该代码,输出ex为异常原因
	} @finally {
	// 都要执行
	}

typedef

将长类型定义为段类型,也可以把长的block类型定义为短类型

typedef 返回值类型 (^新类型)(参数列表);

typedef void (^NewType)();
NewType block1;

typedef int()(^NewType2)(int num1,int num2);
NewType2 block2;

枚举

typedef enum {
  CZMessageTypeMe = 0;
  CZMessageTypeOther = 1;
}CZMessageType;

@property(nonatomic, assign) CZMessageType type; 

switch

switch (state) {
    case 0:
        NSLog(@"未发送");
        break;
    case 1:
        NSLog(@"发送中");
        break;
    case 2:
        NSLog(@"已发送");
        break;
}

#ifndef和#endif

千万不要忽略了头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突
还是把头文件的内容都放在#ifndef#endif中吧,不管你的头文件会不会被多个文件引用,你都要加上这个

#ifndef x  
//先测试x是否被宏定义过
#define x
//如果没有宏定义下面就宏定义x并编译下面的语句
... 
#endif 
//如果已经定义了则编译#endif后面的语句

#ifdef OBJC

#ifdef __OBJC__
//判断是否为OC代码
#endif 

nil NULL NSNull

  • NULL 空地址
  • nil 空对象
  • [NSNull null] 数组中可以存储空值

断言

断言(assertion)是指在开发期间使用的、让程序在运行时进行自检的代码

    NSAssert(myName != nil, @"名字不能为空!");  
    NSLog(@"My name is %@.",myName);  
    // 如果myName为空,则输出名字不能为空!,并报错

func

	NSLog(@"%s",__func__); // 输出调用该语句的对象和函数 

@available版本判断

	if (@available(iOS 15.0, *)) {
		//版本为ios15
	} else {

	}

kindof

//返回值为UICollectionViewCell或其子类
- (__kindof UICollectionViewCell *)collectionView {

}

//元素为UIView本身或其子类
@property (nonatomic, strong) NSArray<__kindof UIView *> *viewCollection;

@synthesize

如果同时重写一个属性的getset方法,需要用到@synthesize

@interface MyClass : NSObject

@property (nonatomic, copy) NSString *name;

@end

@implementation MyClass

@synthesize name = _name;

- (void)setName:(NSString *)name {
    // 在这里重写setter方法,可以对传入的name进行一些自定义处理
    _name = [NSString stringWithFormat:@"My name is %@", name];
}

- (NSString *)name {
    // 在这里重写getter方法,可以对_name进行一些自定义处理
    return _name;
}

@end
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值