OC对象的本质就是一个结构体

为什么说是个结构体?

例如:类里面声明了几个成员变量\实例变量(已添加@plublic),外部对象的指针在访问这个变量的时候是这么写的p->a


0804

注意oc的全称拼写:Objective-C

Mac终端Terminal的一些命令

  • cd 切换目录
  • touch 新建一个.m文件
  • open 打开一个.m文件
  • cc -c ...m编译.m文件,生成.o文件。不会检查方法的合法性
  • cc ...o链接.o文件,生成一个a.out程序。检测方法是否存在及其合法性。如果是c语言,则自动会把c语言的头文件搞进来,但oc的不会,需要手动导入.例如:cc ....o -framework Foundation(注意大小写). cc命令也可以直接链接.m文件。这样就是编译链接一起搞。
  • ./a.out 运行程序
  • clear 清屏
  • mkdir 创建一个文件夹
  • 如果是多个.o文件关联的话,需要在链接的时候一起链接,如果缺少oc框架还需要手动导入.例如:cc one.o two.o -framewirk Foundation

下面是具体的情况


NSLog输出的内容会自动换行

#import有两个作用
  1. 跟#include一样,拷贝文件内容
  2. 可以自动防止文件的内容被重复拷贝。例如导入同一个头文件多次,只在第一次生效,多写的那部分无效.

使用一个框架只需要将其的主头文件.h导入即可.主头文件的名称和框架的名称一样.例如:#import<Foundation/Foundation.h>

面向过程和面向对象的区别
  • 面向过程关注的是解决问题的步骤
  • 面向对象关注的是解决问题需要哪些对象

以修电脑为例:面向过程是要知道怎么修电脑,第一步干什么第二步干什么等等。而面向对象就是直接去找修电脑的人,这个人就是一个对象。面向对象不用关心这个修电脑的人怎么修的,面向过程就要知道怎么修电脑.


类和对象
  • 类是抽象的,是对对象属性和方法的概括和描述
  • 对象是具体的,对象是类的一个实例

类名和函数名第一个字母大写.方法名和变量名第一个字母小写.

函数和类
  • 完整的写一个函数:函数的声明和定义(实现)
  • 完整的写一个类:类的声明和实现

如果一个类具备创建对象的能力,则该类需要继承自NSObject

1、类的声明,用来声明对象的属性和方法

@interface Car : NSObject

{

在这中间写的是成员变量\实例变量.如果不加@public的话,外界是不能通过对象指针p->访问的.链接会报错

  • 不允许在这里初始化成员变量 (和C语言的区别)

  • 不可用static来修饰 (和C语言的区别)

  • 有的时候要把一些成员变量\实例变量直接写在打括号里面的一个原因就是,这样访问成员变量\实例变量可以直接访问,而不需要强制有个对象才能访问.写起来更方便些.但我不提倡这么写,不规范.还是用@property来声明,用self.变量来访问比较好.注意:age=10和self->age=10相同. self.age和[self age]相同. age=10才是是指成员变量本身.这个在循环强引用导致内存泄露的时候有讲法

  • 不加@public可以起到一个保护作用。不让外界的对象直接访问到该成员变量修改值,但可以通过对象方法来实现修改,比如[self setAge:0].所以尽量不要加@plublic

  • 只要在这里写成员变量一定要加下划线_ ,只要在这里加成员变量没有加下划线的就是没理解@property和成员变量的关系

}

@end

问题现象如下图:

一般都这么写:

2、类的实现

@implementation Car

#end


oc中的括号()有两个用途
  1. 用来括住数据类型
  2. 用来将int、float或者double的c语言类型的变量的值转换为oc对象的NSNumber

每个对象内部都会有一个isa指针,这个指针指向了对象所属的类.这个指针大小是8个字节。(这个isa指针实际上是NSObject的一个成员变量)而对每个类来说,每个类里面都有一个superClass指针,指向自己的父类

如下图所示:

从上图可以看出,成员变量是属于对象的,对象内存里除了isa指针就是成员变量.但方法是属于类的,对象可以共用类里面的方法

一个可能的面试题:试着从内存的角度解释一个对象是如何知道自己有哪些成员变量有哪些对象方法的

答:一个类在实例化一个对象的时候就为其在内存中分配了内存地址及内存空间。对象的内存空间里包含两部分,一个是isa指针,一个是对象的成员变量.成员变量是属于对象的,在分配内存的时候就将对象所具有的变量分配到的对象内存中.这样对象就知道了自己有哪些成员变量.而isa指针8个字节,指向了对象所属的类,方法是属于类的.通过isa指针对象就知道了自己有哪些对象方法可以执行.


方法和函数的区别
  • 方法都是以减号-或者加号+开头
  • 方法都要在@interface和#end之间,即要写在类的声明里 方的实现必须写在@implementation和@end之间。即写在类的实现里。
  • 方法只能由对象或者类来调用。函数可以脱离对象存在,但必须在类中。所以在函数中不能调用对象的成员变量。
  • 函数能写在文件中的任意位置,函数归文件所有。注意按照C语言的存放规则和调用规则。即直接调用函数名则需要把函数写在调用位置的前面。如果要写在调用位置的下面,则需要用void 函数名()的方式来调用。

iOS 基础 第一天(0804)的更多相关文章

  1. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  2. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  3. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

  4. 动画 iOS基础

    动画 iOS基础 1.     basic animation  基础动画 一个基础动画 在一个开始值和一个结束值之间运动   messageLabel.alpha=0.0; [UIView  ani ...

  5. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  6. iOS 基础日记-修饰符

    今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...

  7. Xamarin iOS编写第一个应用程序创建工程

    Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的 ...

  8. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  9. C#基础第一天-作业答案

    题一答案: Console.WriteLine("请输入a"); int a = Convert.ToInt32(Console.ReadLine()); Console.Writ ...

随机推荐

  1. linux高可用集群(HA)原理详解(转载)

    一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...

  2. Oracle数据库数据同步方案

    一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...

  3. css3 颜色记

    css3 颜色 opacity 使元素呈现出半透明效果. opacity:alphavalue || inherit alphavalue:默认值为1,可以取0~1任意浮点数.取值为1时,元素完全不透 ...

  4. Android环境搭建的步骤

    Android 环境搭建步骤 这里简单介绍一下学习Android之后如何搭建环境的问题 一.    在搭建环境之前,首先你要先下载Java JDK(根据系统位数选择下载是64位或32位的),Eclip ...

  5. Remote Desktop Connection Manager介绍

    Remote Desktop Connection Manager (RDCMan) 是微软Windows Live体验团队的主要开发者 Julian Burger开发的一个远程桌面管理工具.简称为R ...

  6. (干货)Linux学习资源推荐

    源地址 国内的专业Linux网站(GB) ChinaUnix Linux中国 实验楼: 免费提供了Linux在线实验环境,不用在自己机子上装系统也可以学习Linux,超方便实用!. 国内的专业Linu ...

  7. Android项目源码界面超级华丽的仿QQ最新版本

    这是一个我们比较熟悉的一款应用,高仿专仿最新QQ应用源码,也是一个高仿QQ最新版本的项目,界面超级华丽,使用了大量的自定义控件,项目里实现了部分功能,例如WIFI-FTP(把手机变成FTP服务端,可以 ...

  8. iMAC——全新重装Mac系统

    在参考网上重装Mac系统教程的时候,感觉这篇教程挺不错: http://www.iplaysoft.com/osx-yosemite-usb-install-drive.html (此教程终端命令处需 ...

  9. Objective-C 【内存管理&手动内存管理 综述】

    ------------------------------------------- 内存管理 (1)Objective-C的内存管理 栈区    存放局部变量(由于基本数据类型占用的存储空间是固定 ...

  10. (转)MongoDb的十个使用要点

    从 mongodb 阶段性技术总结 中抽取并整理了对大家有帮助的十个要点:   1.mongodb 表名和字段名统一用小写字母 mongodb 是默认区分大小写的,为了避免以前在 mysql 下遇到的 ...