黑马程序员技术交流社区

标题: OC中类的方法声明问题 [打印本页]

作者: x65396731    时间: 2014-7-29 14:44
标题: OC中类的方法声明问题
本帖最后由 x65396731 于 2014-7-29 14:50 编辑

比如
#import <Foundation/Foundation.h>

@interface Person :MSObject
{        @Public
        int age;
       Double weight;
}
-(void) walk;
@end
@implementation Person
-(void)walk
{
       NSLog(@"一个%d岁%f斤的人正在走路!",age,weight);
}
@end

int main()
{
                   Person *p=[Person new];
                   p->age=20;
                  p->weight=120.5;
                 [p walk];
                return 0;
}
其中红色的类的方法声明不写为什么程序也能运行。视频上不是说每个对象的isa指针都要调用这个类的声明的吗?
谢谢!

作者: 枫·殇    时间: 2014-7-29 23:13
这是方法啊,当然是放在类的实现里面,放在那是多此一举啊
作者: 抱0抱    时间: 2014-7-30 11:16
不声明页可以用
作者: 零下_1°    时间: 2014-7-31 00:24
本帖最后由 零下_1° 于 2014-7-31 00:26 编辑

不写的话,相当于 -(void)walk 变成一个私有的方法了,只允许Person这个类使用,作用域就变成@private了,等看到变量的作用域就明白了,默认是@protected的,就是Person这个类以及它的子类都可以使用,但如果声明里面没有写就自动变成@private的了,还有就是刚开始讲的@public作用域就是在任何地方都可以调用。 还有那个继承时NSObject的啊,注意一下咯
作者: 零下_1°    时间: 2014-7-31 00:27
枫·殇 发表于 2014-7-29 23:13
这是方法啊,当然是放在类的实现里面,放在那是多此一举啊

不能这么讲哦,呵呵…看你想在哪里使用,才能确定要不要放得哈
作者: 枫·殇    时间: 2014-7-31 09:08
零下_1° 发表于 2014-7-31 00:27
不能这么讲哦,呵呵…看你想在哪里使用,才能确定要不要放得哈

好吧,这样啊。。。谢谢哈
作者: 且行且惜    时间: 2014-7-31 20:51
零下_1° 发表于 2014-7-31 00:24
不写的话,相当于 -(void)walk 变成一个私有的方法了,只允许Person这个类使用,作用域就变成@private了, ...

哥们,你理解错了,对于方法,OC里面没有作用域这个说法,不声明,而只是实现-----意思只是说在形式上让调用对象看不到而已啦,如果你知道方法的名字,有可以调用的指针,依旧可以用此方法!并且是想怎么用就怎么用,和其他的声明的方法是一样的!(它与声明的方法的区别是:声明的----所有对象指针都知道这个方法的存在,包括方法的名字,返回类型,传递参数等信息,而不声明就是说不告诉你们这些东西!虽然没有告诉,但是有实现,如果另外一个程序员(你自己肯定知道,所以说别人),用你的类,并且知道这个方法的这些信息,他可以创建对象以后,随便调用此方法)
注:这样编译的时候会有警告,OC的弱语法




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