
1.id关键字
#import <Foundation/Foundation.h>
@interface Persion : NSObject
@property NSString * name;
@property id obj; //同@property NSObject * obj;这个属性必须是一个OC对象
- (void) show:(id)_obj; //方法的参数为id类型,即任意的NSObject对象
@end
@implementation Persion
@synthesize name;
@synthesize obj;
- (void) show:(id)_obj{
NSLog(@"参数obj:%@", _obj);
}
@end
int main(int argc, const char * argv[])
{
// NSObject * p = [Persion new];
id p = [Persion new];
//p.name = @"兰草"; //似乎因为NSobject没有name属性,这样不好使
[p setName:@"菊花"]; //这样却好使
//NSLog(@"植物:%@", p.name);
NSLog(@"植物:%@", [p name]);
[p setObj:@"这个是id属性"]; //字符串是NSString对象
NSLog(@"id属性obj:%@", [p obj]);
[p setObj:[NSNumber numberWithInt:2234]]; //数字对象类型
NSLog(@"id属性obj:%@", [p obj]);
[p show:[NSString stringWithFormat:@"这是id参数"]];
return 0;
}
2.构造方法
#import <Foundation/Foundation.h>
@interface Persion : NSObject
{
NSString * _name;
}
@property NSString * name;
//OC对象的构造方法是init,自定义构造方法命名以initWithXxx格式
- (id) initWithName:(NSString *)name;
@end
@interface Student : Persion
/**
继承了一个_name、一个setName/getName、一个initWithName、init
**/
@end
@implementation Persion
@synthesize name = _name;
/** 重写构造方法
原则:先初始化父类 **/
- (id)init{
if (self = [super init]){ //认定这是构造方法内OC的固定写法
//这里执行业务
_name = @"Heeee";
}
return self; //初始化结束,返回自身对象实例
}
/** 自定义构造方法 **/
- (id) initWithName:(NSString *)name{
if (self = [super init]) {
_name = name;
}
return self;
}
@end
@implementation Student
/**
继承了父类的动态方法
**/
@end
int main(int argc, const char * argv[])
{
// NSObject * p = [Persion new];
Persion * p = [Persion new];
p.name = @"Alizee";
NSLog(@"P的Name:%@", p.name);
Persion * per1 = [Persion alloc]; //分配内存空间
Persion * per2 = [per1 init]; //执行构造方法,初始化
per2.name = @"Eminem";
NSLog(@"Per的Name:%@", per2.name);
Persion * persi = [[Persion alloc] init];
[persi setName:@"Tupac"];
NSLog(@"Persi的Name:%@", persi.name);
Persion * persion = [[Persion alloc] initWithName:@"Michael"];
NSLog(@"Persion的Name:%@", persion.name);
Student * s = [[Student alloc] init];
s.name = @"Student";
NSLog(@"S的Name:%@", s.name);
Student * student = [[Student alloc] initWithName:@"Manson"];
NSLog(@"Student的Name:%@", student.name);
return 0;
}
- end