1,我们之前创建对象的做法 Person *p1 = [Person new]; 让一个指针指向一个对象 这个指针就叫做这个对象的名字
2,匿名对象 就是没有名字的对象 [Person new] 没有指针指向这个对象 这个对象就叫做匿名对象
3,如何去使用一个匿名对象呢 [Person new]->_name = @"jack"; [[Person new] sayHi]; 因为new实际上1个类方法,这个方法做的事情创建对象(4个步骤) [Person new]这句话的结果就是这个匿名对象的地址,可以直接使用。
4,注意点
1),匿名对象只能使用一次 下一次再[Person new]的话是一个新的匿名对象
2),每次创建的匿名对象都是不同的对象
5,匿名对象什么时候使用
如果你发现某个对象的成员只会被我们使用一次 以后再也不需要使用的时候 就可以使用匿名对象
如果方法的参数是一个对象,而调用者为这个参数赋值的时候 就是专门来给这个方法传递的 并且这个对象调用者不会使用 这个时候就可以使用匿名对象 God *god = [God new]; [god killWithPerson :[Person new]];
1,面向对象的三大特征是什么?
封装: 函数就是一个封装的体现 类就是更高级的封装,将数据和行为封装为了一个整体 好处: a,屏蔽内部的实现, 外部不需要知道内部是如何实现的 只需要知道这个对象有什么用 b,方便操作 c,后期的维护十分便利
继承:
多态:
2,存在的问题
就是为对象的属性赋值的时候 语法上其实只要数据的类型是属性的类型就可以 但是,情理上这么做是不合的
就像Person对象有1个int类型的属性_age 表示一个人的年龄 为这个对象的_age属性赋值的时候 其实只要int类型都可以 但是 正常情况只会在0-200之间
解决: 在为对象的属性赋值的时候 ,我希望将这个数据做一个逻辑验证 如果符合 就赋值 否则 就做默认处理
3,如何实现? setter
1),不能写@public 否则 外界就能直接访问这个属性 外界一旦可以访问,就可以任意赋值。
2),再提供一个赋值方法 a,这个方法一定是一个对象方法,因为要为属性赋值 b,没有返回值 c,方法名必须以set开头 跟上去掉下划线首字母大写的属性名 d,这个方法一定是有参数的, 参数的类型与属性的类型一致 e,再在方法的实现中,判断传入的数据是否符合逻辑
4,getter
1),是一个对象方法 2),这个方法有和要拿的属性一样的返回值 没有参数 3),方法名是属性名去掉下划线 4),方法的实现就是直接返回属性的值。
|