本帖最后由 gongxia20 于 2014-10-10 19:30 编辑
点语法: 1、利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge:100]; int age = [stu age]; 点语法 stu.age = 100; int age = stu.age;
2、点语法的本质 其实点语法的本质还是方法调用 当使用点语法时,编译器会自动展开成相应的方法
3、死循环注意 - (void) setAge:(int)age { // 下面的代码会引发死循环 self.age = age; // [self setAge:age]; } - (int) age { // 下面的代码会引发死循环 return self.age; // [self age]; }
成员变量的作用域 1、基本概念 局部变量、全局变量都有自己的作用域,成员变量也不例外 2、类型 @public:任何地方都能直接访问对象的成员变量 @private:只能在当前类的对象方法中直接访(@implementation中默认是@private) @protected:可以在当前类以及子类的对象方法中直接访问(@interface中默认就是@protected) @package:只要处在一个框架中,就能直接访问对象的成员变量介于@private和@public之间
interface和@implementation中不能声明同名的成员变量 3、@implementation补充 没有@interface,只有@implementation,也可以开发一个类
@property和@synthesize @property 用在@inteface中 用来自动生成setter和getter的声明 用@property int age;就可以代替下面的两行 - (int)age; // getter - (void)setAge:(int)age; //setter
@synthesize 用在@implementation中 用来自动生成setter和getter的实现 用@synthesize age = _age;就可以代替 - (int)age{ return _age; } - (void)setAge:(int)age{ _age = age;
@property加强 自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量
id万能指针 id是万能指针,能指向任何OC对象,相当于NSObject * id类型的定义 typedef struct objc_object { Class isa; } *id;
使用 // 注意:id后面不要加上* id p = [Person new]; id是一种数据类型 1.声明定义变量 2.作为参数 3.作为返回值 id b; -(id)test:(id)b; // 父类的指针指向子类的对象-多态 NSObject *objc = [Person new]; // 要想让指向子类对象的父类指针调用子类的私有方法,就要进行强制转化 Person*person1 = (Person *)objc; [person1 eat];
id d = [Person new]; // 用id类型的指针调用其他类的方法的时候,不用进行强制转化 [d eat]; // id是一种数据类型,属于关键字,所以在定义变量时不能定义成id //int id;
其它注意: 判断跟其他**是否**的命名规范(返回YES,否则返回NO) 返回值是BOOL类型的,方法名一般都以is开头 —(BOOL)isInteractWithOther: (Circle *)other;
只有利用类名调用类方法的时候,不需要在类后面写* 其它情况下,类名后面统一加*
|