A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x65396731 中级黑马   /  2014-7-29 14:44  /  1780 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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指针都要调用这个类的声明的吗?
谢谢!

6 个回复

正序浏览
零下_1° 发表于 2014-7-31 00:24
不写的话,相当于 -(void)walk 变成一个私有的方法了,只允许Person这个类使用,作用域就变成@private了, ...

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

好吧,这样啊。。。谢谢哈
回复 使用道具 举报
枫·殇 发表于 2014-7-29 23:13
这是方法啊,当然是放在类的实现里面,放在那是多此一举啊

不能这么讲哦,呵呵…看你想在哪里使用,才能确定要不要放得哈
回复 使用道具 举报
本帖最后由 零下_1° 于 2014-7-31 00:26 编辑

不写的话,相当于 -(void)walk 变成一个私有的方法了,只允许Person这个类使用,作用域就变成@private了,等看到变量的作用域就明白了,默认是@protected的,就是Person这个类以及它的子类都可以使用,但如果声明里面没有写就自动变成@private的了,还有就是刚开始讲的@public作用域就是在任何地方都可以调用。 还有那个继承时NSObject的啊,注意一下咯
回复 使用道具 举报
不声明页可以用
回复 使用道具 举报
这是方法啊,当然是放在类的实现里面,放在那是多此一举啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马