iOS基础总结_语法

1、@interface 、@ implementation

@interface表示类的声明
其声明的内容,对于调用者可见(类似于java的public);
@implementation表示类的实现
其声明的内容,仅自己可见(类似于java的private);

2、@class、#import

#import会包含这个类的所有信息,包括实体变量和方法;
@class只是简单的一个声明告编译器有这个类不让其报错,
那么.m中要用到引入的类的方法和属性时,不还是要#import头文件一次;

注意:
如果A依赖B,B又依赖A,如果全部使用import,编译会报错,应使用class;

3、#import的“”和<>

#import"  " 是自己创建的文件;#import< > 是系统的文件

4、atomic与nonatomic

atomic:默认,原子性,数据同步,多线程中使用
nonatomic: 非多线程中使用,性能高一些

5、readwrite与readonly

readwrite:默认,自动生成存取器
readonly:只生成getter不会有setter方法
readwrite、readonly 作用是控制成员变量的访问权限。

6、strong与weak

强弱引用,与java类似
strong强引用,决定内存不被释放;
weak弱引用,无法决定内存释放被释放;

7、assign、copy、retain

assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。
一般用来处理基本数据类型
(如果a和b指向同一块内存,当a不再使用时,如果直接释放,b使用该内存时,会出crash)

retain和copy都是复制的意思,不过增加了引用计数
(如果a和b指向同一块内存,计数会累加,当计数为0时,可以释放)

区别:
retain拷贝的是指针;
copy拷贝的是内容;

8、extern 、static

extern类似于java的static,作用域:整个app,extern可置于变量或者函数前。
在另一个文件中,通过external全局变量的声明,就可以使用全局变量
static类似于java类的全局变量,作用域:当前类。

9、类方法、对象方法

类方法以 + 开头,调用方式如:[A  m1];
对象方法以 - 开头,调用方式如:[a m2];

10、@property (class)

如:@property (class, nonatomic, assign, readonly) NSInteger userCount;
表示:给类增加一个属性。
其实就是给类增加了一个setting 和getter方法,+方法,注意没有生成实例变量,
这个属性,只是增加getting setting方法,我们需要自己添加静态变量

static NSInteger _userCount = 0;

11、@property定义在.h与.m中的区别

在.m文件中,相当于是@private权限,子类无法访问,也无法修改其权限;
在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改;

12、static的作用

static关键字可以修饰函数和变量,作用如下:
一、隐藏
通过static修饰的函数或者变量,在该文件中,所有位于这条语句之后的函数都可以访问,而其他文件中的方法和函数则不行;

二、静态变量
类方法不可以访问实例变量(函数),通过static修饰的实例变量(函数),可以被类方法访问;

三、持久
static修饰的变量,能且只能被初始化一次;

四、默认初始化
static修饰的变量,默认初始化为0;

13、#pragma mark

将代码分成一个个逻辑块,便于查找

14、类扩展

以ViewController为例,语法:
@interface ViewController ()

@end
可定义属性,如:@property (nonatomic , weak) IBOutlet UILabel *label;
作用:非定义在头文件中,外部类不能使用该类的属性;

15、static

1、局部变量中:
只会被初始化一次,即使是在成员方法中,直到app结束,才释放内存;

2、全局变量:
内存同上,作用域为当前类,不能通过extern引用
(如果是未用static修饰全局变量,作用域为整个app,可被其他类通过extern引用)

你可能感兴趣的:(iOS基础总结_语法)