一.类
类的声明:
@interface 类名 : NSObject
{
这类事物具有的共同的特征,将它们定义为变量
}
功能就是一个方法,将方法的声明写在这里
@end
类的实现:
@implementation 类名
将方法的实现写在这里
@end
类的对象的创建和使用
类名 *对象名 = [类名 new];
默认情况下,对象的属性是不允许被外界直接访问的,如果允许对象的属性可以被外界访问,那么就需要在声明属性的时候加上一个@public关键字。
例如:
@interface Person : NSObject
{
@public
NSString *_name;
int _age;
float _height;
}
@end
访问
对象名->属性名 = 值;
对象名->属性名;//(一般使用)
(*对象名).属性名;
完整例子
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
@public
NSString *_name;
int _age;
int _Chinese;
int _Math;
int _English;
}
@end
@implementation Student
@end
int main(int argc, const char * argv[]) {
Student *s1 = [Student new];
s1->_name = @"旺仔";
s1->_age = 5;
s1->_Chinese = 90;
s1->_Math = 80;
s1->_English = 90;
NSLog(@"Name:%@,Age:%d,Chinese:%d,Math:%d,English:%d",
s1->_name,
s1->_age,
s1->_Chinese,
s1->_Math,
s1->_English
);
return 0;
}
//2021-07-21 10:12:46.193138+0800 TestOc[6732:66503] Name:旺仔,Age:5,Chinese:90,Math:80,English:90
二.方法 (减号-)
1.无参数方法
无参数的方法的声明:
位置:在@interface的大括号的外面
语法:
-(返回值类型)方法名称;
-(void)run;//表示声明了一个无返回值并且无参数的方法,方法的名字叫run,这个需要写在@interface的带括号外面,与@end的里面
无参数的方法的实现:
位置:在@implementation之中实现
语法:
-(返回值类型)方法名称
{
方法实现的代码;
}
@implementation Person
-(void)run
{
NSLog(@“I’m running!”);
}
@end
无参数的方法的调用:
[对象名 方法名];
Person *p1 = [Person new];
[p1 run];
2.有参数方法(同无参),只是增加了形参
3.直接看完整例子
#import <Foundation/Foundation.h>
@interface Phone : NSObject
{
@public
NSString *_brand;
NSString *_color;
float _weight;
NSString *_size;
}
-(void)show;
-(void)call:(int)phoneNumber;
-(void)sendMessage:(int)phoneNumber and:(NSString *)message;
@end
@implementation Phone
-(void)show
{
NSLog(@"本机信息:%@牌 颜色:%@ 重量:%.2fg 尺寸:%@",
_brand,
_color,
_weight,
_size);
}
-(void)call:(int)phoneNumber
{
NSLog(@"正在拨通%d的电话……",phoneNumber);
}
-(void)sendMessage:(int)phoneNumber and:(NSString *)message
{
NSLog(@"已将短信内容:%@ 发送给%d",message,phoneNumber);
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Phone *phone1 = [Phone new];
phone1->_brand = @"Apple";
phone1->_color = @"深空灰";
phone1->_weight = 237.0f;
phone1->_size = @"6.1英寸";
[phone1 show];
[phone1 call:987654321];
[phone1 sendMessage:987654321 and:@"我晚点到!"];
}
return 0;
}
//2021-07-21 10:30:16.707200+0800 TestOc[8980:86732] 本机信息:Apple牌 颜色:深空灰 重量:237.00g 尺寸:6.1英寸
//2021-07-21 10:30:16.707539+0800 TestOc[8980:86732] 正在拨通987654321的电话……
//2021-07-21 10:30:16.707589+0800 TestOc[8980:86732] 已将短信内容:我晚点到! 发送给987654321
三.类方法(加号+)
声明:
+(void)sayHi;
调用:
[类名 类方法名];
注意:
- 在类方法中不能直接访问属性。
原因是:
属性是在对象创建的时候,跟随着对象一起创建在对象之中。类第一次被访问的时候,会做类加载,是把类的代码存储在代码段。
因为属性只有在对象创建的时候才会创建在对象之中,而类方法在执行的时候,有可能还没有对象,当没有对象的时候也就没有属性,所以在类方法中无法直接访问属性。
虽然不能直接访问属性,但是我们可以在类方法中创建一个对象,这个时候就可以访问这个对象的属性了。
同理,在类方法中也不能通过self直接访问对象方法。
网友评论