#import <Foundation/Foundation.h>
//表示引入foundation框架中的foundation头文件
@autoreleasepool
NSLog(@"格式控制字符串",变量列表);
或者
NSLog(@"要输出的信息");
改进之处:
1.会输出一些跟调试相关的信息(执行这段代码的时间,项目名称,进程编号,线程编号).
2.会自动换行.
3. OC中新增的数据类型只能用NSLog函数输出.
1).类的声明
@interface 类名:NSObject { 将类的属性定义为变量 数据类型 变量名 } 方法的声明 @end
2).类的实现
@implement 方法的实现 @end
3.注意:类名的每个首字母大写
类名 *对象名 = [类名 new];
类名 *对象名 = [[类名 alloc] init];
方式一:对象名 -> 属性名(推荐使用)
方式二:(*对象名).属性名
对象.xxx 的语法后跟的不是成员变量,是一个可以被访问的方法名,之所以让你感觉"对象.成员"便令这种方式调用,是因为用@property定义或者手动设置了这个变量的setter和getter方法的方法名和成员变量一样,实际调用的是方法
在@interface的大括号的外面
语法:- (返回值类型)方法名称
2.实现:在@implementation之中实现
3.调用:
[对象名 方法名];
语法:- (返回值类型)方法名称:(参数类型)形参名称;
2.实现:同上
3.调用:
[对象名 方法名:实参];
Person *p1 = [Person new];
Person *p1 = [Person new];
p1 -> _name = @"小明";
Person *p2 = p1;
p2 -> _name = @"小花";
#pragma mark 分组名
#pragma mark -
#pragma mark - 分组名
补充:在写oc代码时,常常会发现,在.h文件中,有@interface的申明,在.m文件中,也有
.h里面的@interface,它是供其它Class调用的。它的@property和functions,都能够被其它Class“看到”(public)
而.m里面的@interface,在OC里叫作Class Extension,是.h文件中@interface的补充。但是.m文件里的@interface,对外是不开放的,只在.m文件里可见(private)
因此,我们将对外开放的方法、变量放到.h文件中,而将不想要对外开放的变量放到.m文件中(.m文件的方法可以不声明,直接用)
@try
{
//存放有可能发生异常的代码,当@try中的代码发生异常时不会崩溃,而是会立即跳转到@catch中的代码,当@catch的代码执行完毕之后,直接往下运行;若代码没发生异常,就会略过@catch往下执行
}
@catch(NSException *ex)
{
//写处理异常的代码
}
@finally
{
//无论@try中是否发生异常,@finally中的代码都会执行
}
[类名 方法名];
1.+ (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
/*
instancetype作为返回值,代表返回的是当前这个类的对象
作用:将C语言的字符串转换为OC字符串对象,参数为C语言字符串
*/
使用方法:
char *str0 = "rose";
NSString *str1 = [NSString stringWithUTF8String:str0];
2.+ (instancetype)stringWithFormat:(NSString *)format,...
/*
作用:拼接一个字符串对象,使用变量或其他数据拼接成OC字符串
*/
使用方法:
int age = 19;
NSString *name = @"小明";
NSString *str = [NSString stringWtihFormat:@"大家好,我叫%@,我今年%d岁",name,age];
1.@property (readonly) NSUInteger length;
/*
作用:length方法返回值为NSUIneteger(实际是unsigned long),得到字符串的字符个数,可以处理中文
*/
使用方法:
NSString *str = @"itcast";
NSUInteger len = [str length];
2.- (unichar)characterAtIndex:(NSUInteger)index;
/*
作用:得到字符串中指定下标的字符,返回值为unichar(实际是unsigned short),如果要输出unichar变量使用%C
*/
使用方法:
NSString *str = @"itcast";
unichar ch = [str characterAtIndex:2];
NSLog(@"ch = %C", ch);
//结果为c
3.- (BOOL)isEqualToString:(NSString *)aString;
/*
判断两个字符串内容是否相同不要使用==判断
作用:判断两个字符串的内容是否相同
*/
使用方法:
NSString *str1 = @"jack";
NSString *str2 = [NSString stringWithFormat:@"jack"];
if([str1 isEqualToString:str2]) {
//相等
}
else {
//不相等
}
4.- (NSComparisonResult)compare:(NSString *)string;
/*
作用:比较两个字符串大小,NSComparisonResult为枚举类型,返回值为-1:小于;0:等于;1:大于
*/
使用方法:
NSString *str1 = @"jack";
NSString *str2 = @"rose";
NSComparisonResult res = [str1 compare:str2];
*/
[Preson new]->_name = @"jack";
[[Preson new] sayHi];
//注意:上面是创建了两个对象
@interface 类名:父类名
Person *p[3];
p[0] = [Person new];
p[1] = [Student new];
p[2] = [ItClassStudent new];
//ItClassStudent继承Student,Student继承Person
4.如果一个数组的元素类型NSObject类型,那么任何的OC对象都可以存储到这个数组中
5.如果一个方法的参数是一个对象,为该方法传值的时候可以传递一个本类对象也可以传递一个子类对象
@"<对象所属的类名:对象的地址>"