属性修饰词

接口文件1:Animal.h

#import <Foundation/Foundation.h>
#import "Cat.h"

@interface Animal : NSObject
{
//    NSString *_color;
//    NSString *_name;
    Cat *_cat;
}
@property (nonatomic,assign,readwrite) NSString *color,*name;
@property (nonatomic,retain,readwrite) Cat *cat;
- (instancetype) init;
- (void) run;
- (void) dealloc;

@end

实现文件1:Animal.m

#import "Animal.h"

@implementation Animal
- (instancetype) init
{
    if ([super init])
    {
        _color = @"";
        _name = @"";
    }
    return self;
}
- (void) run
{
    NSLog(@"%s",__PRETTY_FUNCTION__);
}
- (void) dealloc
{
    [_cat release];
    [super dealloc];
}

@end

接口文件2:Dog.h

#import "Animal.h"

@interface Dog : Animal
{
    int _age;
}
@property (nonatomic,assign) int age;
- (void) bark;
- (void) dealloc;

@end

实现文件2:Dog.m

#import "Dog.h"

@implementation Dog
- (void) bark
{
    NSLog(@"汪汪!");
}
- (void) dealloc
{
    [super dealloc];
}

@end

接口文件3:Cat.h

#import <Foundation/Foundation.h>

@interface Cat : NSObject
{
@private
    int weight;
}
- (void) jump;
- (void) dealloc;

@end

实现文件3:Cat.m

#import "Cat.h"

@implementation Cat
- (void) jump
{
    NSLog(@"%s",__PRETTY_FUNCTION__);
}
- (void) dealloc
{
    [super dealloc];
}

@end

测试文件:main.m

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Dog.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        Animal *animal = [[Animal alloc] init];
        Dog *dog = [[Dog alloc] init];
        Cat *cat = [[Cat alloc] init];
        Cat *cat1 = [[Cat alloc] init];
        [cat1 autorelease];
        
        NSLog(@"%lu",[animal retainCount]);
        NSLog(@"%lu",[dog retainCount]);
        NSLog(@"%lu",[cat retainCount]);
        NSLog(@"%lu",[cat1 retainCount]);
        
        animal.cat = cat;
        dog.cat = cat;
        
        NSLog(@"%lu",[animal retainCount]);
        NSLog(@"%lu",[dog retainCount]);
        NSLog(@"%lu",[cat retainCount]);
        NSLog(@"%lu",[cat1 retainCount]);
        
        [animal release];
        NSLog(@"%lu",[animal retainCount]);
        [dog release];
        NSLog(@"%lu",[dog retainCount]);
        [cat release];
        NSLog(@"%lu",[cat retainCount]);
        NSLog(@"%lu",[cat1 retainCount]);
        
    }
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}

时间: 2024-10-02 20:52:49

属性修饰词的相关文章

属性 与成员变量的 区别与联系 及属性修饰词理解

成员变量和属性的区别与联系在于: 成员变量是一个“内”概念,反映的是类的结构构成.属性是一个“外”概念,反映的是类的逻辑意义. 成员变量没有读写权限控制,而属性可以指定为只读或只写,或可读可写. 成员变量不对读出作任何后处理,不对写入作任何预处理,而属性则可以. public成员变量可以视为一个可读可写.没有任何预处理或后处理的属性. 而private成员变量由于外部不可见,与属性“外”的特性不相符,所以不能视为属性. 虽然大多数情况下,属性会由某个或某些成员变量来表示,但属性与成员变量没有必然

Java基础知识笔记(一:修饰词、向量、哈希表)

一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最难理解的多重继承技术等内容,通过垃圾回收机制简化了程序内存管理,统一了各种数据类型在不同操作系统平台上所占用的内存大小. (2)网络特性:Java语言是目前对网络支持最全面,与网络关系最密切的计算机语言之一. (3)面向对象:由于Java语言是一种新型计算机语言,没有兼容过程式计算机语言的负担,因此

Java线程和Java修饰词

META标签 用来描述一个HTML网页文档的属性. 含义:元素可提供相关页面的元信息. <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含任何内容.<meta> 标签的属性定义了与文档相关联的名称/值对. meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <head> <meta h

【java编程思想--学习笔记(二)】访问控制-Java访问权限修饰词

如果不提供任何访问修饰词,则意味着它是"包访问权限". 2.1 包访问权限 包访问权限赋予包内的类相互访问彼此成员的权限. 应该说, 包访问权限为将类群聚在一起的行为提供了意义和理由,即建立包的目的不仅仅是为了分类和区分,更是为了是同一个包内的类可以拥有彼此的代码. 取得对某一成员访问权的途径: 1)该成员的访问修饰词为public. 2)通过不加访问权限修饰词并将目标类放在同一包内的方式. 3)继承.子类可以访问父类的public和protected修饰词的成员,但只有在父子类处于同

Django ORM常用的函数以及修饰词

函数名称或修饰词 说明 filter() 返回符合指定条件的QuerySet exclude() 返回不符合指定条件的QuerySet ordey_by() 串接到QuerySet之后,针对某一指定的字段进行排序 all() 返回所有的QuerySet get() 获取指定符合条件的唯一元素,如果找不到或有一个以上符合条件,都会产生exception first()/last() 获取第1个和最后一个元素 aggregate() 可以用来计算数据项的聚合函数 exists() 用来检查是否存在某

Chapter6_访问权限控制_访问权限修饰词

Java中有四种访问权限,public,private,protected和包访问权限,它们是置于类中每一个成员之前的定义,无论是一个域还是一个方法,下面一一介绍. 一.包访问权限 如果不提供任何访问权限修饰词,这意味着是包访问权限.即当前包中的所有其他类对那个包访问权限的成员都有访问权限,但对于这个包之外的所有类,这个类是private的,所以处于一个编译单元中的所有类之间,都是可以互相访问的.包访问权限允许将包内所有的类组合起来,以便于它们之间可以轻松地相互访问.总的来说,取得对某成员的访问

大钟的ios开发之旅(2)————简单说说ios中ARC与非ARC模式下的property的变量修饰词

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

关于 Java正则表达式中的Possessive数量修饰词的理解

关于 Java正则表达式中的Possessive数量修饰词的理解 正则表达式对于数量限定符如 ?, + , *, {n, m} 的匹配默认是贪婪模式,比如: a.*b   匹配 acbab 的结果是 acbab 而不是acb 正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示, 比如: a.*?b 匹配 acbab 的结果是 acb 而不是acbab 而Java语言在正则表达式中支持一种Possessive 数量修饰词 ,用加号表示.其字面意思是像贪

C#关键字-修饰词abstract、virtual的区别

修饰词abstract和virtual的最明显区别是什么? abstract 抽象方法,一个方法的前面加了修饰词abstract,表示其方法还没被实践, 而后继承的衍生类(子类)的方法前加上修饰词override来实践父类所声明的抽象方法. 当一个方法被声明为?abstract 时,其类也要一并声明成?abstract. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) {