美文网首页
基本了解OC语法

基本了解OC语法

作者: playman | 来源:发表于2016-11-08 18:08 被阅读0次

    基本类的使用

    本章要知道的内容有——

    • 创建一个类
    • 声明方法和类方法
    • 声明属性 成员变量
    • 创建一个对象
    • NSString的使用
    • NSNumber的使用

    创建一个类

    创建新文件 填写类名

    语言选择Objective-C,继承的父类是 NSObject。

    这样,一个类就创建好了。

    声明方法和类方法

    方法

    方法的声明:在.h文件中声明,一般是 - (返回值类型)方法名(驼峰标识法){}

    (void)setName:(NSString *)name;

    (NSString *)name;

    方法的实现:在.m文件中书写,快捷的实现方式是 - 方法名 就会提示出来,自己选择就会

    (void)setName:(NSString *)name{

    _name = name;
    

    }

    (NSString *)name{

    if (_name != nil) {
    
        return _name;
    
    }else{
    
        return nil;
    
    }
    

    }

    构造方法:一般init开头,后面会很常见

    (instancetype)init;

    (instancetype)init

    {

    self = [super init];
    
    if (self) {
    
        _name = @"erhuo";
    
    }
    
    return self;
    

    }

    类方法

    类方法就是通过 + 开头的方法,不需要创建对象就能够调用

    • (void)setNewName:(NSString *)newName;
    • (void)setNewName:(NSString *)newName{
    NSLog(@"%@", newName);
    

    }

    [Person setNewName:@"xinXiaoQiang"];

    成员变量、属性

    成员变量:有三个属性修饰符,@public @private @protected

    {

    //声明成员变量
    

    // @public 公有修饰符

    // @private 私有变量修饰符

    // @protected 保护的修饰符

    @public
    
    NSString * _name;
    
    @private
    
    NSString * _address;
    
    @protected
    
    NSInteger age;
    

    }

    属性:修饰有 nonatomic atomic assign retain copy weak readwrite readonly strong

    一般常用的是:nonatomic assign copy strong

    @property NSString * nickName;

    创建一个对象

    怎么创建一个对象

    1、引入头文件

    用 #import "Person.h" 防止循环导入

    用 #include "Person.h"会引起循环导入

    2、创建对象

    Person * person1 = [[Person alloc] init];

    3、使用对象

    [person1 setName:@"xiangqiang"];

    最终代码样式

    Person.h
    
    #import <Foundation/Foundation.h>
    
    //这是.h文件,一般在这里写 属性 方法的声明
    
    @interface Person : NSObject
    
    {
    
        //声明成员变量
    
    //    @public  公有修饰符
    
    //    @private 私有变量修饰符
    
    //    @protected 保护的修饰符
    
        @public
    
        NSString * _name;
    
        @private
    
        NSString * _address;
    
        @protected
    
        NSInteger age;
    
    }
    
    //nonatomic atomic assign retain copy weak readwrite readonly strong setter=<#method#>
    
    //一般我们使用的是 nonatomic  assign  copy  strong
    
    @property NSString * nickName;
    
    //一般面向对象的编程语言,都需要setter getter方法
    
    //OC中setter方法是set+成员变量名
    
    //getter方法是直接成员变量名
    
    - (void)setName:(NSString *)name;
    
    - (NSString *)name;
    
    //OC要写初始化方法,用init开头
    
    - (instancetype)init;
    
    //类方法
    
    + (void)setNewName:(NSString *)newName;
    
    @end
    
    
    Person.m
    
    #import "Person.h"
    
    @implementation Person
    
    //[super init]是啥意思??? 因为每一个类都是有一个父类,这个父类我们都称他为 爸爸
    
    - (instancetype)init
    
    {
    
        self = [super init];
    
        if (self) {
    
            _name = @"erhuo";
    
        }
    
        return self;
    
    }
    
    - (void)setName:(NSString *)name{
    
        _name = name;
    
    }
    
    - (NSString *)name{
    
        if (_name != nil) {
    
            return _name;
    
        }else{
    
            return nil;
    
        }
    
    }
    
    + (void)setNewName:(NSString *)newName{
    
        NSLog(@"%@", newName);
    
    }
    
    @end
    
    
    main.m
    
    #import <Foundation/Foundation.h>
    
    //include 在C中比较常见的引入头文件的方式,但是在OC中,这样导入可能引起重复引用
    
    //#include "Person.h"
    
    //一般使用 import
    
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
        @autoreleasepool {
    
            //创建一个类
    
    //        Person * person1 = [[Person alloc] init];
    
    //        person1->_address 划横线的
    
    //        person1->age  划横线的
    
    //        person1->_name  可以访问的
    
    //        NSLog(@"%@", person1->_name);
    
    //        [person1 setName:@"xiangqiang"];
    
    //        NSString * res = [person1 name];
    
    //        NSLog(@"%@", res);
    
    //        [Person setNewName:@"xinXiaoQiang"];
    
            Person * person2 = [[Person alloc] init];
    
            [person2 setNickName:@"qiangGe"];
    
    //        NSLog(@"%@", person2.nickName);
    
            NSLog(@"%@", [person2 nickName]);
    
        }
    
        return 0;
    
    }
    
    

    NSString的使用

    不可变字符串

    基本创建方式

    void generalUse(){

    //NSStrig 是什么呢,是对字符串封装的一个类
    
    //1.最简单的创建方式
    
    NSString * str1 = @"str1";
    
    //2.通过构造方法创建
    
    //        NSString * str2 = [[NSString alloc] initWithString:@"str3"];
    
    //3.通过构造方法创建 格式化创建
    
    NSString * str3 = [NSString stringWithFormat:@"%@,22", @"sss"];
    
    //copy 浅拷贝,拷贝的只是地址
    
    NSString * str4 = [str1 copy];
    
    //mutableCopy 深拷贝,拷贝的是整个对象,开辟一个新的内存,存入“str1”这个字符串对象
    
    NSString * str5 = [str1 mutableCopy];
    
    NSLog(@"str1:%@\nstr2:\nstr3:%@\nstr4:%@\nstr5:%@", str1, str3, str4, str5);
    
    NSLog(@"================");
    
    NSLog(@"str1:%p\nstr4:%p\nstr5:%p",str1, str4, str5);
    

    }

    NSString的常用方法

    void testMethod(){

    //1、字符串拼接
    
    NSString * str = @"i am ";
    
    NSLog(@"%@",[str stringByAppendingString:@"good boy"]);
    
    str = [str stringByAppendingString:@"bad boy"];
    
    NSLog(@"%@", str);
    
    NSLog(@"================");
    
    //2、字符串格式化拼接
    
    NSString * str2 = @"xiao";
    
    NSInteger age = 2;
    
    double height = 80.001;
    
    str2 = [str2 stringByAppendingFormat:@"%@-%ld-%.3lf", @" bu dian", age, height];
    
    NSLog(@"%@", str2);
    
    //3、字符串分割
    
    NSString * str3 = @"abcdefghigkflmn";
    
    //通过单个字符分割生成数组
    
    NSLog(@"%@",[str3 componentsSeparatedByString:@"f"]);
    
    //通过字符集合,字符内都有的,一律分割
    
    NSLog(@"%@",[str3 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"fgh"]]);
    

    }

    可变字符串

    创建可变字符串:

    //NSMutableString 可变字符串

    //1.创建字符串
    
    NSMutableString * str = [[NSMutableString alloc] initWithString:@"i am"];
    
    [str appendString:@" ss"];
    
    NSLog(@"%@", str);
    
    //2.格式化创建字符串
    
    NSMutableString * str2 = [[NSMutableString alloc] initWithFormat:@"%@ sss", @"无所谓"];
    
    NSLog(@"%@", str2);
    
    //3.注意,这样创建的字符串默认是不可变的字符串
    
    NSMutableString * str3 = @"不可取";
    
    可变字符串的方法使用:

    //基本常用方法,跟不可变的用法类似,但有一些不同方法

    NSMutableString * str = [[NSMutableString alloc] initWithString:@"i am a good boy"];
    
    //插入
    
    [str insertString:@" not" atIndex:4];
    
    NSLog(@"%@", str);
    
    //更新,替换
    
    [str replaceCharactersInRange:NSMakeRange(0, 2) withString:@"no"];
    
    NSLog(@"%@", str);
    
    //删除
    
    [str deleteCharactersInRange:NSMakeRange(0, 4)];
    
    NSLog(@"%@", str);
    
    //根据下标取出字符
    
    NSLog(@"%c",[str characterAtIndex:2]);
    
    //从第几个下标开始取值
    
    NSLog(@"%@",[str substringFromIndex:3]);
    
    //从下标0开始,取到哪个地方
    
    NSLog(@"%@",[str substringToIndex:5]);
    
    //从字符串中取出范围的
    
    NSLog(@"%@",[str substringWithRange:NSMakeRange(0, 6)]);
    

    NSNumber的使用

    是对数字的封装的类,因为在集合中无法使用基本数据类型,所以需要包装

    //整型

    NSNumber * num1 = @(2);

    NSNumber * num2 = [NSNumber numberWithInteger:22];

    //浮点型

    NSNumber * floatNum = [NSNumber numberWithFloat:2.1];

    NSNumber * doubleNum = [NSNumber numberWithDouble:2.222];

    //布尔型

    NSNumber * boolTrue1 = @(YES);

    NSNumber * boolTrue2 = [NSNumber numberWithBool:YES];

    NSNumber * boolFalse1 = @(NO);

    NSNumber * boolFalse2 = [NSNumber numberWithBool:NO];

    //字符型

    NSNumber * char1 = [NSNumber numberWithChar:'a'];

    相关文章

      网友评论

          本文标题:基本了解OC语法

          本文链接:https://www.haomeiwen.com/subject/znzauttx.html