//
// ReViewClass.h
// hellowWorld
// 本类是oc复习练手类
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import <Foundation/Foundation.h> /**
OC常量:
头文件里声明常量:
extern NSString * const MyOwnConstant;
extern NSString * const YetAnotherConstant;
在.m中通过赋值定义常量:
NSString * const MyOwnConstant = @"myOwnConstant";
NSString * const YetAnotherConstant = @"yetAnotherConstant";
*/
//常量声明 注意:可以在@interface外面声明。
extern const NSString* EAST ;
extern const NSString* WEST ; @interface ReViewClass : NSObject{ /**
要点
(1)基类的私有属性能被继承,不能被使用。
(2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
(3)OC只能单继承
(4)OC所有类都有NSbObject基类
**/ /**
范围修饰词
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
**/
@public int _id ; @public NSString *_name ; /*
不写关键字默认是@private
private 变量能不能被继承?
能继承不能用,除非父类提供操作方法
*/
@private int classId ; }
//常量声明,可以放这里,但不能放上面{}内。
//extern const NSString* NORTH =@"north",不能在头文件里直接赋值。
extern const NSString* NORTH;
extern const NSString* SOUTH; @property (assign) NSString* mDescription ;
/*
属性:
(1)关键字@@property
(2)自动合成getter和setter方法。当声明一个属性(property)的时候编译器默认情况下会自动生成相关的getter和setter方法
(3)属性(property)关键词能够传递出相关行为的额外信息。属性提供了一些可能会使用的特性来进行声明,
包括
assign vs copy vs weak vs strong
atomic vs vs nonatomic
readwrite vs readonly 老版本 @property 需要在.m文件中对应使用synthesize 新版synthesize作用如下:
1.@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法。
2.禁止@synthesize:如果某属性已经在某处实现了自己的 setter/getter ,可以使用 @dynamic 来阻止 @synthesize 自动生成新的 setter/getter 覆盖。
3.内存管理:@synthesize 和 ARC 无关。
4.使用:一般情况下无需对属性添加 @synthesize ,但一些特殊情形仍然需要,例如protocol中声明的属性。
*/ /**
在括号外面声明方法,比如set get 方法。
*/ -(void)set_id :(int)stuId ;
/*
set_id知识点:
(1)oc 语法中如果想使用和java一样的"." 去访问类成员变量,那么必须定义一个与变量名相同的get方法。
注意是get+变量名:
例如有set_id以后ReViewClass 实例指针可以 ReViewClass._id ;否则 ReViewClass->_id ;
(2)在点语中可以调用不带参数的任何方法如:-(NSString*)getIdAndName;
*/
-(void)setName:(NSString *)stuName; -(int)getId;
-(NSString*)getName ;
-(NSString*)getIdAndName: (NSUInteger) stuId;
-(NSString*)getIdAndName;
/*
可以方法重载 同名不同参数
*/ -(ReViewClass *) init ;
+(int) getInstanceCount ; @end
//
// ReViewClass.m
// hellowWorld
//
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import "ReViewClass.h" /**
静态变量的特性:
(1)静态变量的作用域是与它定义的位置有关系
定义在文件中它的作用域就是整个文件,并且是私有的,其他的类或其他的文件是不可以访问该静态变量的
定义在方法内,它的作用域就是这方法,其他的方法是不可以访问该静态变量
(2)静态变量只初始化一次(和java中是一样的)
类方法和实例方法甚至函数都可以使用静态变量
(3)静态变量定义在源文件中(.m)
(4)静态变量可以定义在方法或函数体外,也可以定义在方法(类方法和实例方法)或函数体内。
静态变量定义在方法或函数体外
该方式适用于当静态变量会被本文件内的多个函数使用的情况,最好能把静态变量定义统一放在源文件的起始处(@implementation的外面), */
//静态变量实例。
static int instanceCount ; //常量赋值
const NSString* EAST =@"east" ;
const NSString* WEST =@"west"; @implementation ReViewClass @synthesize mDescription ; const NSString* NORTH = @"north" ; -(void)set_id:(int)stuId{
_id = stuId ;
}
-(void)setName:(NSString *)stuName{
_name = stuName ;
}
-(int)getId {
return _id ;
}
-(NSString*)getName {
return _name ;
} -(NSString*)getIdAndName: (NSUInteger) stuId;
{
NSMutableString * str = [[NSMutableString alloc]init];
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
}
-(NSString*)getIdAndName;
{
NSMutableString * str = [[NSMutableString alloc]init];
if(nil!=_name)
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
} +(NSString *)toString{
return [NSString stringWithFormat:@"id:%d" ,];
} //类方法用于操作静变量
+(int) getInstanceCount {
return instanceCount ;
}
-(ReViewClass*) init{
instanceCount++;
return [super init];
} @end
#import <Foundation/Foundation.h>
#import "ReViewClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
extern NSString* NORTH ; // insert code here...
NSLog(@"Hello, World!");
ReViewClass *reviwClass = [[ReViewClass alloc]init];
ReViewClass *reviwClass1 = [[ReViewClass alloc]init];
ReViewClass *reviwClass2 = [[ReViewClass alloc]init];
ReViewClass *reviwClass3 = [[ReViewClass alloc]init];
ReViewClass *reviwClass4 = [[ReViewClass alloc]init];
[reviwClass setName:@"hongtao"];
reviwClass._id = ;
reviwClass.mDescription = @"string property!";
NSLog(@"%@,%@",reviwClass.getIdAndName ,[reviwClass getName]);
NSLog(@"%d",[ReViewClass getInstanceCount]);
NSLog(@"%@",NORTH);
// NSString* temStr =[reviwClass getIdAndName];
//运行了相应方法,但方法返回值并没有得到- (void)performSelector:原型
[reviwClass performSelector:@selector(getIdAndName:) withObject:@() afterDelay:(1.2f)]; }
return ;
}

oc 基本语法 类 静态变量 常量的更多相关文章

  1. PHP 类属性 类静态变量的访问

    php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...

  2. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  3. php 类静态变量 和 常量消耗内存及时间对比

    在对类执行100w次循环后, 常量最快,变量其次,静态变量消耗时间最高 其中: 常量消耗:101.1739毫秒 变量消耗:2039.7689毫秒 静态变量消耗:4084.8911毫秒 测试代码: cl ...

  4. C++类静态变量的一种使用特例

    不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!

  5. php类 静态变量赋值 static $name="abc"

    <?php class test { static $name="abc"; } echo test::$name; 1.巴斯科范式 class_statement: var ...

  6. C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序

    为了弄清这个代码,写了个测试,但是测试的结果和往上的代码有所差别,仁者见仁,智者见智了.如果我的测试用例用问题,欢迎指出. 首先,方法的是在被调用时执行,但是静态方法在所有地方都可以调用,应该在很早的 ...

  7. Java变量类型,实例变量 与局部变量 静态变量

    实例变量: 实例变量在类中声明,但在方法的外面,构造函数或任何块. 当空间分配给某个对象在堆中,插槽为每个实例变量创建值. 当一个对象与使用关键字 “new” 来创建,在对象被销毁销毁创建的实例变量. ...

  8. C#静态变量 总结

    在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用.但有些时候,这样做却不是个明智的选择. 假设我们要定义一个图书类,要求该类能保存图书 ...

  9. Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序

    直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...

随机推荐

  1. Python自制小时钟,并转换为exe可执行程序详解

    一,简介Python写完程序,要靠命令来执行太LOW,太低调了,还不华丽了. 再说别人的电脑,都没有Python库,怎么执行,还能不能愉快的一起玩耍了. 所以哪怕只会写一个HelloWorld,也要弄 ...

  2. 第十章、sys模块

    目录 第十章.sys模块 第十章.sys模块 方法 详解 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules.keys() 返回所有已经导入的模块列表 sys.ex ...

  3. Delphi MSComm 控件方法

  4. Linux系统组成和获取命令帮助2

    基于cobbler进行网络安装:    https://cobbler.github.io/ 终端:terminal        无论是系统的图形界面还是文字界面,都可以叫做控制台,终端       ...

  5. 方正科技win7重装系统

    1.制作装机版U盘启动盘 老毛桃装机版制作启动U盘教程 http://www.laomaotao.org/jiaocheng/92/upqdzz.html 2.下载系统镜像文件保存至U盘启动盘 MSD ...

  6. index首页加载数据库数据方法

    https://blog.csdn.net/qq_33198758/article/details/82987805 在做网站的时候,会遇到需要首页加载数据库数据的情况.而web.xml配置的首页: ...

  7. Typescript玩转设计模式 之 创建型模式

    作者简介 joey 蚂蚁金服·数据体验技术团队 前言 我们团队的工作是用单页面应用的方式实现web工具.涉及到数万到十数万行的前端代码的管理,而且项目周期长达数年. 怎么样很好地管理好这种量级的前端代 ...

  8. 运行别人的Vue项目

    步骤一:先 安装 cnpm cmd命令下 输入  npm install -g cnpm --registry=http://registry.npm.taobao.org (由于npm有些资源被屏蔽 ...

  9. log1p和expm1

    在数据预处理时首先可以对偏度比较大的数据用log1p函数进行转化,使其更加服从高斯分布,此步处理可能会使我们后续的分类结果得到一个更好的结果:平滑处理很容易被忽略掉,导致模型的结果总是达不到一定的标准 ...

  10. Java中两个Long对象如何比较是否相等

    学java的都知道8种基本类型,知道Long和long的区别,前者定义的是对象,后者定义的是long类型的变量. 但是今天在比较两个Long类型值的时候碰到一个坑,如下: 问题如下 Long a = ...