• OC基础(4)


    NSString 类介绍及用法

    本小节知识点:

    1. 【掌握】NSString常见方法
    2. 【掌握】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.结构体成员变量

    设计一个”学生“类 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. 【掌握】对象作为方法的参数
    2. 【掌握】对象作为方法的返回值

    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. 【掌握】对象作为方法的参数连续传递

    1.对象作为方法的参数连续传递

    实现功能:士兵开枪,枪射击子弹
    枪类:
    名称:Gun 属性:型号(_size),子弹个数(_bulletCount) 
    行为:射击
    人类: 名称:Soldier 属性:姓名(_name) life level(等级)
    行为:跑 蹲 开枪 跳

  • 相关阅读:
    javascript给builtin对象添加新方法
    __stdcall、__cdecl 、CALLBACK 几种函数修饰符
    判断是空白符(空格、换页、换行、回车、横向制表和纵向制表)的方法
    strcpy函数的实现
    strncpy实现
    strcat实现
    android修改标题栏高度
    断言 assert
    字符类别测试总结
    判断是否是控制字符
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5014762.html
Copyright © 2020-2023  润新知