概述
0: OC 方法调用方式:
对象方法用对象指针进行调用
类方法用类名调用(这一点和java 也差不多的,只不过java 也是可以通过对象来调用的)
声明一个类:里面有两个方法,一个是类方法,一个对象方法
//
// Person.h
// MethodUsed
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
//-开头的是对象方法
-(void) eat;
//+开头的是类方法
+(NSString *) personWithName:(NSString *) name;
@end
+++++
//
// Person.m
// MethodUsed
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Person.h"
@implementation Person
//前面是减号就是对象方法
-(void) eat{
};
//前面是+号就是类方法
+(NSString *) personWithName:(NSString *) name{
return [NSString stringWithFormat:@"我的名字叫%@",name];
};
@end
+++++++++
import进去
//
// main.m
// MethodUsed
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"//不能少
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person *person =[Person new];//注意前面是应该是类型的指针
//对象方法使用对象调用
[person eat];
//类方法使用类来调用
NSString *name =[Person personWithName:@"kodulf"];
NSLog(@"%@",name);
}
return 0;
}
+++++++++++++
1: new 方法实现原理
//
// main.m
// MethodUsed
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"//不能少
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person *person2 =[Person new];//注意前面是应该是类型的指针
NSLog(@"对象的地址:%pn",person2);//p是地址的意思
NSLog(@"对象的description:%@n",person2);
//对象方法使用对象调用
[person2 eat];
//类方法使用类来调用
NSString *name =[Person personWithName:@"kodulf"];
NSLog(@"%@",name);
//new 方法实现原理:,我们只要了解就好了,平时直接使用new 就可以了
Person *person =[Person new];//注意前面是应该是类型的指针
//new 方法实现原理:
//1,给对象分配内存空间地址
//2,给对象完成默认的初始化操作
//3,返回对象空间地址给对象指针
person=nil;//防止野指针
//person=[Person alloc];//这个只会执行上面的第一步就是给对象分配内存空间地址
//person=[Person init];//执行的是第二部,给对象完成默认的初始化操作
//上面的两步可以缩减为下面的一步,
person=[[Person alloc] init];
}
return 0;
}
+++++++++++++
2: oc自定义构造方法:
创建一个Person类
//
// Person.h
// CustomerStruct
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
NSUInteger _age;
NSString *_sex;
}
//自定义构造方法的声明:返回的是instancetype的类型的
-(instancetype)initWithName:(NSString *)name;
-(instancetype)initWithAge:(NSUInteger)age;
-(instancetype)initWithALL:(NSString *)name age:(NSUInteger)age sex:(NSString *)sex;
//注意上面的写法不能错了,age:()age sex:()sex ,第一个name 不用
@end
++++++
//
// Person.m
// CustomerStruct
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Person.h"
@implementation Person
//在这里实现在h文件中声明的构造方法:
-(instancetype)initWithName:(NSString *)name{
self = [super init];//调用父类的初始化方法
if(self){
_name =name;
_age=0;
_sex=@"男";
}
return self;
//其实可以调用我们的initWithALL的构造方法的话只要虾面的一句话
//return [self initWithALL:name age:23 sex:@"male"];
}
-(instancetype)initWithAge:(NSUInteger)age{
self =[super init];
if(self){
_name = @"初始化有age的名字";
_age=age;
_sex=@"male";
}
return self;
//其实可以调用我们的initWithALL的构造方法的话只要虾面的一句话
//return [self initWithALL:@"初始化有age的名字" age:age sex:@"male"];
}
-(instancetype)initWithALL:(NSString *)name age:(NSUInteger)age sex:(NSString *)sex{
self = [super init];
if(self){
_name=name;
_sex=sex;
_age=age;
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"description输出 name=%@ age =%zd sex =%@",_name,_age,_sex];//age的输出是zd
}
@end
++++++
//
// main.m
// CustomerStruct
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!n");
//Person *person =[Person new];
Person *person =[[Person alloc] initWithAge:123];
NSLog(@"使用initWithAge的构造方法%@n",person);
person =[[Person alloc] initWithName:@"张山"];
NSLog(@"使用initWithName的构造方法%@n",person);
person =[[Person alloc] initWithALL:@"kodulf" age:100 sex:@"男"];
NSLog(@"使用all的构造方法%@n",person);
}
return 0;
}
+++++++
最后
以上就是听话棒球为你收集整理的OC 方法调用方式,new 方法实现原理,oc自定义构造方法:的全部内容,希望文章能够帮你解决OC 方法调用方式,new 方法实现原理,oc自定义构造方法:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复