Objective-C 类方法 self关键字

NSString基本使用

#import <Foundation/Foundation.h>

int main() {
    //最简单的创建字符串的方式
    NSString *str = @"大武汉";
    NSLog(@"我在%@", str);

    //另一种创建字符串的方式
    int age = 15;
    int no = 5668;
    NSString *name = @"黄祎a";
    NSString *newStr = [NSString stringWithFormat : @"My age is %i and My no is % i and My name is %@", age, no, name];
    NSLog(@"---------%@", newStr);

    //获取字符串的长度
    int size = [name length];
    NSLog(@"名字的长度是%i", size);
    return 0;
}

类方法

#import <Foundation/Foundation.h>

@interface Person : NSObject
+ (void) test;
@end

@implementation Person
+ (void) test {
    NSLog(@"hello world");
}
@end

int main() {
    [Person test];
    return 0;
}

/*
 对象方法
    以 - 开头 <只能>由对象调用
    对象方法可以使用成员变量
    相对而言效率低

 类方法
    以 + 开头 <只能>由类调用
    类方法不能使用成员变量
    相对而言效率高

 一个类中允许出现对象方法名 = 类方法名
 */ 

self关键字

#import <Foundation/Foundation.h>

@interface Person : NSObject {
    @public
    int _age;
}
- (void) show;
- (void) test1;
- (void) test2;
@end

@implementation Person
- (void) show {
    NSLog(@"Person的年龄是%i", _age);
}
- (void) test1 {
    int _age = 20;
    NSLog(@"Person的年龄是%i", _age);
}
- (void) test2 {
    int _age = 30;
    NSLog(@"Person的年龄是%i", self->_age);
}
@end

int main() {
    Person *p = [Person new];
    [p show];
    [p test1];
    [p test2];
    return 0;
}

//当成员变量和局部变量同名 采取就近原则 访问的是局部变量
//用self可以访问成员变量 区分成员变量和局部变量

/** 使用细节 **/
//出现的地方: 所有OC方法中(对象方法|类方法) 不能出现在函数中
//作用: 使用‘self->成员变量名‘访问当前方法调用的成员变量; 使用‘[self 方法名]‘用来调用方法(对象方法|类方法)

/** 常见错误 **/
//用self去调用函数
//类方法中使用self调用对象方法 对象方法中使用self调用类方法
//self死循环
时间: 2024-11-06 13:54:29

Objective-C 类方法 self关键字的相关文章

Objective C类方法load和initialize的区别

它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理. 先来看看NSObject Class Reference里对这两个方法说明: +(void)initialize The runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherit

抽象类(abstract class)和 接口(interface)

PHP中的 抽象类(abstract class)和 接口(interface) 一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类

黑马程序员--oc 类的封装 继承 和多态

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 成员变量的命名规范: 成员变量名要以 _开头 作用: 1.可以让成员变量和get方法的名称区分开 2.可以和局部变量区分开,一看到以_开头的变量一般都是成员变量 封装: 在定义成员变量时,尽量不要用@public 这种写法 ,而是使用set方法和get方法 @interface Student : NSObject { int _age; } /* set方法: 作用:提供一个方法给外界设置成

interface与抽象类

抽象类: 定义:在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类 抽象类不能被实例化. 抽象类被继承之后,子类必须完全实现父类的全部抽象方法才能实例化.如果子类没有全部实现父类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化. <?php abstract class A{ abstract function show(); } class

C和OC的基础语法(易混淆的概念知识)

List 0. 深复制与浅复制, NSObject万能指针.id指针.instancetype区别,单例import.include.@class的区别 strong 与 weak 区别 #define  和  typedef的区别, static 与  extern 区别,@required与@optional 区 别,@private.@protected .@public.@package区别 变量的命名规则以及规范(4规则,2规范) 数据类型转换 printf与scanf,自增自减,逻辑

php中的抽象类(abstract class)

1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不

在谈PHP中的 抽象类(abstract class)和 接口(interface)

一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 

PHP 抽象类,接口,抽象方法,静态方法

1.Abstract class(抽象类) 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abs

(转)PHP中的 抽象类(abstract class)和 接口(interface)

转自:http://blog.csdn.net/sunlylorn/article/details/6124319 一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现