当前位置:   article > 正文

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

available 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)
  • 1
  • 2
  • 3

NSLog函数占位符

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

分组导航标记

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

多文件开发

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

异常处理

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

typedef

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

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

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

typedef int()(^NewType2)(int num1,int num2);
NewType2 block2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

枚举

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

@property(nonatomic, assign) CZMessageType type; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

switch

switch (state) {
    case 0:
        NSLog(@"未发送");
        break;
    case 1:
        NSLog(@"发送中");
        break;
    case 2:
        NSLog(@"已发送");
        break;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

#ifndef和#endif

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

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

#ifdef OBJC

#ifdef __OBJC__
//判断是否为OC代码
#endif 
  • 1
  • 2
  • 3

nil NULL NSNull

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

断言

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

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

func

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

@available版本判断

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

	}
  • 1
  • 2
  • 3
  • 4
  • 5

kindof

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

}

//元素为UIView本身或其子类
@property (nonatomic, strong) NSArray<__kindof UIView *> *viewCollection;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/223945?site
推荐阅读
相关标签
  

闽ICP备14008679号