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文件与目录管理之ls的使用

    来源:鸟哥的私房菜 查看文件与目录 ls ls [-aAdfFhilnrRSt] 目录名 ls [--color={never,auto,always}] ls [--full-time] 目录名 选 ...

  2. ubuntu14_pip 安装

    1:install pip python-dev    sudo apt-get install python-dev    sudo apt-get install libevent-dev     ...

  3. [转]How to convert IP address to country name

    本文转自:http://www.codeproject.com/Articles/28363/How-to-convert-IP-address-to-country-name   Download ...

  4. [设计模式]<<设计模式之禅>>模板方法模式

    1 辉煌工程——制造悍马 周三,9:00,我刚刚坐到位置上,打开电脑准备开始干活. “小三,小三,叫一下其他同事,到会议室开会”,老大跑过来吼,带着坏笑.还没等大家坐稳,老大就开讲了:“告诉大家一个好 ...

  5. Nginx HTTP User_agent

    假设我这里有大量图像.CSS.javascript等静态文件,分别放在后端服务器  192.168.1.5 和 192.168.1.6上,那么我如何利用nginx的反向代理功能将不同的 http_us ...

  6. PowerShell 解锁使用浏览器下载的文件

    1 dir *.* -Recurse | Unblock-File

  7. css选择器有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先

    CSS选择器:基本可以分为通配选择器,标签选择器,类选择器,ID选择器,简单属性选择,具体属性选择,根据部分属性值选择,特定属性选择,从结构上来分还有后代选择器,子元素选择器,相邻兄弟选择器以及伪类. ...

  8. 浅谈.NET中加密和解密的实现方法分享

    这篇文章介绍了.NET中加密和解密的实现方法,有需要的朋友可以参考一下 .NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利.它将CryptoAPI改编进.NET的Syste ...

  9. Android adb常见问题整理(转)

    原文地址:http://blog.csdn.net/androiddevelop/article/details/8130416 以下都是ADB连接问题,可以通过尝试如下步骤,由简单度排序 1. 插拔 ...

  10. ajax-典型应用-验证用户名

    用servlet实现后台: