NSString 类介绍及用法
本小节知识点:
- 【掌握】NSString常见方法
- 【掌握】NSString字符串长度计算
1.NSString常见方法
-
NSString是 Objective-C 中核心处理字符串的类之一
-
创建常量字符串,注意使用“@“符号。
NSString *astring = @"This is a String!";
- 创建空字符串,给予赋值。
NSString *string = [NSString new];
string = @"李大锤";
- 创建格式化字符串:占位符(由一个%加一个字符组成)
[NSString stringWithFormat:@"大锤%i岁了", 30];
2.NSString字符串长度计算
- 通过调用NSString类的对象方法 length 可以获得字符串的长度
-
字符串长度是指该字符串中一共有多个字符(无论是中文还是英文)
-
纯英文字符
NSString *str = @"lnj";
NSLog(@"length = %i", [str length]);
输出结果:3
- 中英文混合
NSString *str = @"lnj李";
NSLog(@"length = %i", [str length]);
输出结果:4
- 纯中文
NSString *str = @"李大锤";
NSLog(@"length = %i", [str length]);
输出结果:3
NSUInteger 就是 unsigned long
源码:
typedef unsigned long NSUInteger;
结构体成员变量
本小节知识点:
- 【掌握】结构体成员变量
1.结构体成员变量
设计一个”学生“类 1> 属性
* 姓名
* 生日
用结构体作为类的实例变量(生日)
#import <Foundation/Foundation.h> //定义生日的结构体
typedef struct{
int year;
int month;
int day;
}MyDate;
@interface Person : NSObject
{
@public
NSString *_name;//定义姓名
MyDate _birthday;//定义生日
}
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
Person *p = [Person new];
p->_name = @"sb";
//因为结构体已经初始化为0了,在次初始化就报错了,但是可以逐个赋值。
//p->_birthday = {1990,12,3};
p->_birthday.year = 2014;
p->_birthday.month = 05;
p->_birthday.day = 12;
NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day);
//也可以整体赋值
MyDate de={1993,11,11};
p->_birthday = de;
NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day);
return 0;
}
对象和方法之间的关系
本小节知识点:
- 【掌握】对象作为方法的参数
- 【掌握】对象作为方法的返回值
1.对象作为方法的参数
- 对象作为方法参数传递是地址传递,因为对象是一个指针变量
- 在方法内部,可以通过对象形参,访问该对象的成员变量(如果该对象的该成员变量的访问权限是public的)
- 在方法内部,可以通过对象形参,调用该对象上的方法(给这个对象发送消息)
int main(int argc, const char * argv[])
{
// 1.创建士兵对象
Soldier *s1 = [Soldier new];
s1->_name = @"jack";
s1->_life = 10;
s1->_level = kSoldierLevel1;
// 2.创建枪对象
Gun *gun = [Gun new];
gun->_bulletCount = 100;
// 3.射击
[s1 fireByGun:gun];
}
@implementation Soldier
- (void)fireByGun:(Gun *)gun
{
[gun shoot];
}
@end
2.对象作为方法的返回值
- 对象可以作为方法的返回值;
- 对象返回值的实质是返回指向该对象的指针,该对象是存储在堆内存中的。
- 由于堆内存是由程序员管理的,所以它不会因为函数结束而被销毁
@implementation Shop
- (Gun *)buyGun
{
Gun *gun = [Gun new];
gun->_bulletCount = 100;
return gun;
}
@end
对象作为方法的参数连续传递
本小节知识点:
- 【掌握】对象作为方法的参数连续传递
1.对象作为方法的参数连续传递
实现功能:士兵开枪,枪射击子弹
枪类:
名称:Gun 属性:型号(_size),子弹个数(_bulletCount)
行为:射击
人类:
名称:Soldier
属性:姓名(_name) life level(等级)
行为:跑 蹲 开枪 跳