1.内存结构
程序一运行,系统会开辟一个Student类的空间,用指针 isa 指向;
2.setter 和 getter
setter方法的命名规则:-(void)setAge:(int)age;
1)必须以set开头,并且是“-”方法
2)set后面必须跟上成员变量的名称,成员不要下划线,
3)没有返回值,一定是void类型
4)一定接受一个参数,且参数的类型必须跟成员变量的类型一致
getter方法的命名规则 -(int)age;
1)方法名必须跟成员变量的名字一致,不要下划线;
2)不带参数
3)返回值的类型必须和成员变量的类型一致
- ‘.’点语法 student.number = @"小泰迪"; 点语法不用下滑线
1)点语法,编译器特性
2)通过点语法获得成员变量的值,本质实在调用getter方法
3)通过点语法设置成员变量的值,本质是在调用setter方法
4.是否使用setter和getter的情况说明
1)可读可写:即提供了setter方法,也提供getter方法
2)只读:只提供getter方法,没有setter方法
3)只写(少见),一般用在密码加密的情况,不让别人拿到加密后的数据
5.#import <Foundation/Foundation.h>
import "Student.h" //千万不要倒入.m文件
头文件不要倒入.m文件,不会报错 但是会对后面操作造成问题
6.self关键字
1)self:指向当前对象的指针
2)当前对象:谁调用这个方法,谁就是当前对象
3)在类的内部,方法之间相互调用,可以使用self来调用
7.属性【重中之重】
@property 变量类型 成员变量(不要下划线)
属性的声明,它是编译器特性,使用这句话,编译器内部会自动帮我们做三件事:
1)自动帮我们声明变量;
2)自动帮我们声明并实现set方法;
3)自动帮我们声明并实现get方法;
属性声明的变量,不再需要下划线,那么当编译器自动声明成名变量的时候,
默认的自动加上下划线
属性的修饰符
默认情况下,所有的属性都是可读可写的(readwrite)
1)readonly修饰的属性,只生产get方法
@property(readonly,nonatomic) NSString *name;
2)atomic (系统默认的是原子性操作)
原子性操作,适用于多线程中,保证多个线程同时访问一个资源时的
安全性,但是效率低下,默认值
3)nonatomic
非原子性操作,在非多线程使用,提高效率,性能
1.str1 isEqualToString: str2 用于比较两个字符串是否相同:(如下)
if ([name isEqualToString:_name]&&[password isEqualToString:_password])
2.两个类进行比较
-(void)marry:(QFPerson *)otherPerson;方法声明的时候带参数,,
一个对象调用另一个对象