oc58--Category注意事项

//
//  main.m
//  Category注意事项

#import <Foundation/Foundation.h>
#import "Person+NJ.h"

int main(int argc, const char * argv[]) {

    Person *p = [Person new];
//    p.height = 1.75;
    [p say];

    return 0;
}
//
//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    double _weight;
}

@property (nonatomic, assign) int age;

- (void)say;
@end
//
//  Person.m

#import "Person.h"

@implementation Person

-(void)say
{
    NSLog(@"age = %i", _age);
}
@end
//
//  Person+MJ.h

#import "Person.h"

@interface Person (MJ)
@end
//
//  Person+MJ.m

#import "Person+MJ.h"

@implementation Person (MJ)

// 5.如果多个分类中都有和原有类中同名的方法, 那么调用该方法的时候执行谁由编译器决定,会执行最后一个参与编译的分类中的方法
-(void)say
{
    NSLog(@"%s", __func__);
}
@end
//  Person+NJ.h

#import "Person.h"

// 1.分类是用于给原有类添加方法的, 它只能添加方法, 不能添加属性(成员变量)
@interface Person (NJ)
//{
//    double _height;
//}
// 2.分类中的@property, 只会生成setter/getter方法的声明, 不会生成实现以及私有的成员变量,所以下面写的不会报错,但是也不能添加属性。
//@property (nonatomic, assign) double height;

- (void) hello;

/*
 方法的调用顺序:
 1.分类
 2.本类
 3.父类
 */
@end
//  Person+NJ.m

#import "Person+NJ.h"

@implementation Person (NJ)

- (void)hello
{
    // 3.可以在分类中访问原有类中.h中的属性
    NSLog(@"hello %f", _weight);
}

// 4.注意: 如果分类中有和原有类同名的方法, 会调用分类中的方法,也就是说会忽略原有类的方法
// 注意: 在开发中尽量不要这样写,原有的就废了。
-(void)say
{
    NSLog(@"%s", __func__);
}
@end
时间: 2024-10-18 18:15:19

oc58--Category注意事项的相关文章

OC基础(18)

Category基本概念 Category注意事项 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: p

OC第六天小结

总结 标号 主题 内容 一 autorelease autorelease基本概念/自动释放池/autorelease基本使用 二 autorelease注意事项 注意点/应用场景 三 ARC 什么是ARC/ARC的注意点和优点/ARC的判断原则/ARC机制判断/ARC快速使用 四 ARC下的内存管理 ARC下单对象内存管理/多对象内存管理/循环引用问题/下@property参数 五 ARC和MRC兼容和转换 ARC模式下如何兼容非ARC的类/如何将MRC转换为ARC 六 Category 什么

【OC学习-21】什么是类的类目category和类的延展extension?以及如何创建和注意事项

(1)什么是类目 声明一个类时,有实例变量和方法,而如果事后想增加方法的话直接在类里面添加感觉会显得杂乱无章,如果创建一个子类的话,层级多了会糊涂掉.至此,类目诞生. 从上可知,类目就是类的一个派生,你可以理解成事"只有方法,没有实例变量"的一种子类. (2)创建类目 可以和创建类一样通过New File >>> Objective-C category创建,选择从ASStudent类派生的话,如创建的名字是life,那么文件名则默认是ASStudent+life.h

Objective-C 之Category学习教程

在日常的开发中,可能会碰到这样的需求:给某个类增加方法.比如说,需要给NSString类增加一个打印的方法.当然,我们可以新建一个类比如TestString,并继承NSString类,在新的类TestString中实现 displayString方法.但是,这种方法有一个明显的缺陷是:只有 TestString类有该方法,NSString类的其他子类,比如 NSMutableString 不能使用该方法.能否给 NSString 类增加一个方法,让NSString以及NSString的所有子类都

黑马程序员---OC基础7【ARC概念】【ARC对象内存管理】【分类Category】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [ARC概念]   1.指针的分类 1)强指针,默认的情况下,所有的指针都是强指针,关键字strong: 2)弱指针,_ _weak关键字修饰符的指针 2.ARC概念 自动引用计数 永远不要写retain和release.autorelease三个关键字 编译器会在编译的时候自动插入retain和release.autorelease, 是一个编译器的特性:“垃圾回收”是运行时的特性 3.ARC工

category、protocol、delegate总结

一.category(类别) 类别是一种类扩展的机制,能为现有的类添加新方法. ①类别的基本语法 @interface部分,如: @interface NSString (NumberConvenience) - (NSNumber *) lengthAsNumber; @end 我们为NSString类添加了名为NumberConvenience的类别. 注: 类别只可以添加方法,不可以添加实例变量 类别可以添加属性,但属性必须是@dynamic类型的  @implementation部分 @

八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中 . 2.为什么会有autorelease? OC的内存管理机制中比较重要的一条规律是:谁申请,谁释放. 但有些情况下,开发者并不能确定某些对象何时释放.这时候就需要自动释放池. 它的好处是: (1)不需要再关心对象释放的时间 : (2)不需要再关

关于IntentFilter的几点注意事项:

http://blog.csdn.net/cnnumen/article/details/8464786 IntentFilter就是用于描述intent的各种属性, 比如action, category等 一些属性设置的例子: <action android:name="com.example.project.SHOW_CURRENT" /> <category android:name="android.intent.category.DEFAULT&q

ANSI和UNICODE编程的注意事项

建立UNICODE编码工程 在VC60下,默认方式下建立的是ANSI编码的工程(注:编译的exe内部,其资源字符是以UNICODE保存),建立UNICODE编码工程的方法: 1.为工程添加UNICODE和_UNICODE预处理选项.   具体步骤:打开[工程]->[设置-]对话框,在C/C++标签对话框的"预处理程序定义"中去除_MBCS,加上_UNICODE,UNICODE.(注意中间用逗号隔开). 在没有定义UNICODE和_UNICODE前,所有函数和类型都默认使用ANSI