person *p1 =[person new];
只能作为指针变量的值,等价于0,不指向任何一块空间,其实是个宏
同上
不建议随便使用,c指针用null(不指向空间),oc指针用nil(不指向对象)
假设下面这个写在函数之中, Person *p1=[person new]
p1是一个指针变量,那么只能存储地址
(3)注意 a。对象之中只有属性,没有方法,自己类的属性加一个isa指针指向代码段中的类 b。如何访问对象的属性 指针名->属性名 c。如何调用方法 【指针名 方法名】 先根据指针找到对象,对象发现要调用的方法,再根据对象的isa指针找到类 然后调用类里的方法 (4)为什么不把方法存储在对象中? 存储在对象会导致方法冗余,每写一个对象都要存储。 (5)如果创建一个对象并没给其赋值,其默认值为: 如果属性的类型是基本数据类型,那么赋值为0 如果属性的类型是C语言的数据类型,那么赋值为NULL 如果属性的类型是OC的类指针类型,那么赋值为nil
#pragma mark 这是一个导航
//水平线
#pragma mark -
#pragma mark - 水平线下的导航
#pragma mark 这也是一个导航
1函数 void test() { } 2方法 -(void)sayHi 3相同点 都是用来封装一段代码的,将一段代码封装其中,表示一个相对独立的功能 函数或者方法只要被调用,那么封装在其中的代码就会自动执行 4不同点 (1)语法不同 (2)定义的位置不同 方法的声明只能定义在@interface的大括号外面,实现只能写在@implementation之中。 函数除了@interface的大括号里面和函数的内部,其他地方都可以写 就算把函数写在类中,函数也不属于类 所有创建的对象中也没有这个函数,所以不要在类中写函数 (可以,但极度不规范) (3)调用的方法不一样 函数可以直接调用 方法要先创建对象 (4)方法属于类,有家庭,有归属感,而函数则独立
@interface @implementation 1两者不能嵌套,顺序不能改变 2声明和实现都要有 3声明要放在使用类的前面,实现可以放在后面 4特殊情况可以只有实现(千万别用,不规范) 5属性名一定要以下划线开头,这是规范,类名首字母要大写 6属性不允许声明时初始化(赋值) 7oc方法必须要创建对象通过对象名来调用 8方法只有声明,没有实现 a.虽然只有警告 b.指针调用方法,运行时报错