------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、点语法
1、由代码入手认识点语法
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;//默认为@protected
}
- (void)setAge:(int)age;
- (int)age;
@end
@implementation Person
- (void)setAge:(int)age
{
_age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge];
}
- (int)age //get方法
{
return _age;
}
@end
int main(int argc, const char * argv[])
{
// insert code here...
Person *person = [Person new];
//[person setAge:10];
person.age = 10;//点语法,等效与[person setAge:10];
//这里并不是给person的属性赋值,而是调用person的setAge方法
//int age = [person age];
int age = person.age;//等效与int age = [person age]
NSLog(@"age is %i", age);
return 0;
}
2、点语法的作用
OC设计点语法的目的,是为了让其他语言的开发者可以很快的上手OC语言开发,使用点语法,让它和其他面向对象的语言如java很像。
3、点语法的本质
(1)、其实点语法的本质还是方法调用
(2)、当使用点语法时,编译器会自动展开成相应的方法
(2)、当使用点语法时,编译器会自动展开成相应的方法
person.age = 10;//点语法,等效与[person setAge:10];
<pre name="code" class="objc">int age = person.age;//等效与int age = [person age]
4、点语法死循环注意
- (void) setAge:(int)age {
// 下面的代码会引发死循环
self.age = age;
}
- (int) age {
// 下面的代码会引发死循环
return self.age;
}
二、成员变量的作用域
1、类型
@private:只能在当前类的对象方法中直接访问
@protected:可以在当前类以及子类的对象方法中直接访问
@public:任何地方都可以直接访问
@package:同一个“体系内”(框架)可以访问,介于@private和@public之间
@protected:可以在当前类以及子类的对象方法中直接访问
@public:任何地方都可以直接访问
@package:同一个“体系内”(框架)可以访问,介于@private和@public之间
2、使用注意
(1)在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在这里声明的成员变量是@private的。在.m中定义的成员变量不能喝它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
(2)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的。
(3)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。
(2)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的。
(3)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。