博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4、OC —— 构造方法
阅读量:6280 次
发布时间:2019-06-22

本文共 2449 字,大约阅读时间需要 8 分钟。

  hot3.png

1、回顾之前写的 Person 类的 set 和 get 方法

    Person.h

#import 
@interface Person : NSObject {    int _age;        // 年龄    int _height;     // 身高     }- (void)setAge:(int)age;- (int)age;- (void)setHeight:(int)height;- (int)height;@end

    Person.m

#import "Person.h"@implementation Person- (void)setAge:(int)age {    _age = age;}- (int)age {    return _age;}- (void)setHeight:(int)height {    _height = height;}- (int)height {    return _height;}@end

    

    main.m

#import 
#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        // 调用了init构造方法,alloc是由类名直接调用,所以是静态方法,而init则是动态方法        Person *person = [[Person alloc] init];                person.age = 20;        person.height = 150;    }    return 0;}

2、现在我们自己来写一个构造方法,来实现初始化的时候 Person 类的两个私有变量可以被赋值

    Person.h

@interface Person : NSObject {    int _age;        // 年龄    int _height;     // 身高     }// ...// 自己写的构造方法,是一个动态方法- (id)initWithAge:(int)age andHeight:(int)height;@end

    Person.m

@implementation Person// ..// 实现自己写的构造方法- (id)initWithAge:(int)age andHeight:(int)height {    // 跟 java 一样先从父类那初始化    self = [super init];        // 如果初始化成功不为空    if (self != nil) {        _age = age;    // 或者 self.age = age;        _no  = no;     // 或者 self.no  = no;    }        // 上面的代码可简写成以下,先赋值,再判断是否为空    // if (self = [super init]) {    //     ...    // }        // 最后要返回一个已初始化的对象    return self;}@end

    main.m

int main(int argc, const char * argv[]) {    @autoreleasepool {        // Person *person = [[Person alloc] init];        // person.age = 20;        // person.height = 150;                Person *person = [[Person alloc] initWithAge:20 andHeight:150];                NSLog("age=%i,height=%i", person.age, person.height);    }    return 0;}

3、 %@代表打印一个对象

    main.m 

int main(int argc, const char * argv[]) {    @autoreleasepool {        Person *person = [[Person alloc] init];                NSLog(@"%@", person);    // 输出:person的地址    }    return 0;}

    

    可以重写类自带的description方法来打印输出,因为它默认就是输出类的地址

    Person.m

@implementation Person// ..// 重写description方法- (NSString *)description {    return @"This is Person Class";}@end

    这时再使用 NSLog 输出这个类就会输出以上的字符串了。

4、补充

    a)self 在动态方法中代表调用这个方法的对象(谁调用这方法,谁就是self);在静态方法中它代表这个类;

    b)写在 .h 文件中的变量默认是 @protected,即可以自己和子类访问,若想设置为 @public @private 可这样设置

@interface Person : NSObject {    int _age;         @public    int _height;        @private    int _width;}@end

    c)没写在 .h 文件中的方法属于私有方法,写了的则为公有方法;

转载于:https://my.oschina.net/cobish/blog/339263

你可能感兴趣的文章
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
建设网站应该考虑哪些因素
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>