黑马程序员技术交流社区

标题: 博文共享—OC—特有语法 [打印本页]

作者: gongxia20    时间: 2014-10-10 19:29
标题: 博文共享—OC—特有语法
本帖最后由 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;

只有利用类名调用类方法的时候,不需要在类后面写*
其它情况下,类名后面统一加*


作者: 微雨独行    时间: 2014-10-11 00:15
大神,赞你100下
作者: Jack-xie    时间: 2014-10-11 00:54
好棒!楼主好厉害!
作者: songxing10000    时间: 2014-10-11 01:29
好东西收藏了
作者: QQ920924960    时间: 2014-10-11 07:42
这个好像还不错
作者: gongxia20    时间: 2014-10-11 10:31
微雨独行 发表于 2014-10-11 00:15
大神,赞你100下

没大神的100篇厉害
作者: 魔法少年十三    时间: 2014-10-11 11:12
那个构造方法、分类,description,SEL这些呢。。。
作者: gongxia20    时间: 2014-10-12 00:10
魔法少年十三 发表于 2014-10-11 11:12
那个构造方法、分类,description,SEL这些呢。。。

没发,只发了一份
作者: 魔法少年十三    时间: 2014-10-12 04:47
gongxia20 发表于 2014-10-12 00:10
没发,只发了一份

求分享哈,我也想看看自己是不是有些知识点疏漏了
作者: Lizzie    时间: 2014-10-13 00:24
正好也到这块,学习了!
作者: 邢玉池    时间: 2014-10-13 00:47
刚把C语言视频看完。。。。:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2