黑马程序员技术交流社区
标题:
OC中self指针问题?
[打印本页]
作者:
葬花桥
时间:
2014-4-30 11:27
标题:
OC中self指针问题?
本帖最后由 葬花桥 于 2014-5-4 08:20 编辑
前面问过isa指针,知道了它是每个对象中指向类的指针,在调用对象方法时,通过它去寻找类中的对象方法。后来学习了self指针,感觉它和this指针差不多,指向调用方法的对象本身,我是不是可以拿它当this指针用,又或者它们还是有区别?
作者:
魅影穿眸
时间:
2014-4-30 11:52
使用的方法是一样的,因为指针其实就是一个地址,不论面向对象和面向过程,地址这个概念是一样的。C++因为有对象的概念,所以也有了指向对象的指针,比如:
Class A{
};
A a;
A *P=&a;
就表示指针P是指向对象a的指针
作者:
Freedam
时间:
2014-5-2 20:11
oc中的self和java中的this还是有区别的:
oc中的self可以用在动态方法也可以用在静态方法,
而java中的this只能用在动态方法中。
例如:
oc中
main.m
#import <Foundation/Foundation.h>
#import "student.h"
int main(int argc, const char * argv[])
{
int a;
student *stu = [student new];
[stu setname:@"lsmseed"];
NSLog(@"%@",stu->name);
a = [stu getnum];
NSLog(@"%d",stu->number);
[student print];
printf("Hello, World!\n");
return 0;
}
复制代码
student.m
#import "student.h"
@implementation student
- (void) setname:(NSString *)name
{
self->name = name;
}
- (int) getnum
{
return self->number;
}
+ (void) print
{
NSLog(@"%@",self);
}
@end
复制代码
student.h
#import <Foundation/Foundation.h>
@interface student : NSObject
{
@public
int number;
NSString *name;
}
- (void) setname: (NSString *)name;
- (int) getnum;
+ (void) print;
@end
复制代码
运行结果:
2014-05-02 19:51:03.434 self[876:303] lsmseed
2014-05-02 19:51:03.438 self[876:303] 0
2014-05-02 19:51:03.439 self[876:303] student
Hello, World!
Program ended with exit code: 0
代码中student这个类定义了三个方法其中动态方法是setname和getnum,静态方法是print,self在这三个方法中体现了不同的作用,首先在动态方法中self指代调用者的对象就是stu,在静态方法中self指代类student这个类名,在不同的方法中意义不同可以同时用在两种方法中。
java中的this
set.java(动态)
public class student
{
int number;
public void setnum(int number)
{
this.number = number;
}
public static void main(String[] args)
{
student n = new student(100);
System.out.println("num = %d"+n.setnum);
}
}
复制代码
运行结果:
num = 100
set.java(静态)
public class student
{
int number;
public static void setnum(int number)
{
this.number = number;
}
public static void main(String[] args)
{
student n = new student(100);
System.out.println("num = %d"+n.setnum);
}
}
编译出错,这也是一个典型错误,静态只能访问静态。
因此this不能用于静态方法中,而self可以。同时this()这种形式也用于java的一些构造函数中,self没有这样的用法,所以在一些应用中this和self还是有较大区别的。
作者:
葬花桥
时间:
2014-5-3 09:48
Freedam 发表于 2014-5-2 20:11
oc中的self和java中的this还是有区别的:
oc中的self可以用在动态方法也可以用在静态方法,
而java中的this ...
这个我后来也看到老师讲到了,谢谢这么仔细的回答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2