Objective-C:OC的字符串、类与对象

来源:互联网 发布:地理专业知乎 编辑:程序博客网 时间:2024/06/18 05:30

OC的字符串

void print(NSString *str){    NSLog(@"%@",str);}int main() {    @autoreleasepool {        NSLog(@"Hello, World!");        NSString* str1=@"This is a string";        NSLog(@"%@",str1);        NSString* str2;        str2=str1;        str2=@"This is another string";        print(str2);    }    return 0;}

类与对象(1)

  1. 类:是结构体的升级,用于定义变量
    1.1关键字
    1.2.属性前加下划线
    1.3类里面有方法(函数)
    1.4 类的变量只能定义在堆上,不能定义在栈上,且不需要 自己释放
    1.5 类中的方法被调用时需要使用中括号
    1.6 类中的属性不能在类外被操作,需要使用setter赋值,用getter访问

  2. 对象
    2.1 对象是一种特殊的变量
    2.2 对象与变量的区别是,对象可以调用类中的方法
    2.3 对象也被称为实例。用类定义一个对象,也被称为类的 实例化

  3. 分割文件,类的声明在.h文件中,类的方法在.m文件中

@interface MyClass :NSObject{    int _i; //属性前面加下划线    char _ch;}-(void)method; //方法声明-(void)setI:(int)i;-(int)getI;              //一般get省略,直接写I,程序员约定的偷懒方式-(void)setCh:(char)ch;-(char)getCh;@end@implementation MyClass //类中方法定义,所有类中的方法写到里边-(void)setI:(int)i{    _i=i;}-(int)getI{    return _i;}-(void)setCh:(char)ch{    _ch=ch;}-(char)getCh{    return _ch;}-(void)method{    NSLog(@"类中的函数被执行了");}@endint main() {    @autoreleasepool {        //OC类的变量不能定义在栈上        MyClass *mc=[MyClass alloc];    //定义对象        [mc method]; //方法调用         [mc setI:20]; //属性赋值,属性需要方法来访问,不能直接访问        int i=[mc getI];        [mc setCh:'a'];        char ch=[mc getCh];        NSLog(@"i=%d,ch=%c",i,ch);    }    return 0;}

类与对象(2)

  1. 定义带有多个形参的方法
  2. 访问权限
    2.1 属性(4种)私有,保护,包内,公有
    2.2 方法(2种)私有 公有
  3. 属性:由关键字自动生成的成员变量的声明+settet+getter
//1.定义带有多个形参的方法-(void)setName:(NSString *)name andAge:(int)age{ //同时修改两个属性的方法    _name=name;    _age=age;}-(void)setName:(NSString *)name andAge:(int)age andID:(NSString *)ID andAddress:(NSString *)address{    _name=name;    _age=age;    _ID=ID;    _address=address;} //同时修改四个属性的方法
//2.访问权限@interface CZExample : NSObject{    int _i0; //_i0的访问权限是保护的,默认状态    @public    int _i1; //_i1的访问权限是共有的,一般不建议使用    @package    int _i2; //_i2的访问权限是包内的    @protected    int _i3; //访问权限是保护的    @private    int _i4; //访问权限私有的,作用域在类内。在子类中不能使用}-(void)method;@end@implementation CZExample{    int _i5; //在implementation中关键字不起作用吗,定义的属性全部为私有的}-(void)method{ //公有方法    [self privateMethod]; //self 调用私有方法    NSLog(@"这是一个公有方法");}-(void)privateMethod{ //私有方法,在interface中没有声明,直接写出方法的函数体是属于私有方法    NSLog(@"这是一个私有方法");}@end
//3.属性:由关键字自动生成的成员变量的声明+settet+getter@interface CZFraction3 : NSObject@property int n;    //自动定义_n,并声明定义set,get方法。@property int d;@property(readonly) double value;   //只读属性-(void)show;@end@implementation CZFraction3-(double)value{               //从新定义get方法    return self.n*1.0/self.d;}-(void)show{    NSLog(@"%d/%d",self.n,self.d);}@endint main(int argc, const char * argv[]) {    @autoreleasepool {       CZFraction3 *f3=[CZFraction3 alloc];        f3.n=8;     //调用setter方法        f3.d=10;        [f3 show];            NSLog(@"%lg",f3.value);        }    return 0;}
0 0