小编bar*_*dog的帖子

现代Objective-C(2013)并声明ivars /使用@property,@ dynamic和@synthesize

使用当前版本的Objective-C,用于声明ivars的官方标准和最佳实践是什么,使用@property@synthesize?关于这个主题有很多帖子和资源,但大多数帖子和资源在一两年前相当陈旧.我最近学会了在类的实现中只在声明块中声明ivars,以便OOP的封装原则不被破坏,但是在这个时代甚至需要声明ivars?在做什么可能的用例:

@interface MyClass()
@property (nonatomic) NSString* data;
@end

@implementation MyClass{
    @private
        NSString* _data;
}
@end
Run Code Online (Sandbox Code Playgroud)

有必要的?为了进一步说明,是否有必要使用@synthesize?我的理解是使用@property将自动合成访问器方法以及支持ivars.我做了一些实验,我注意到当我没有NSString* _data', I can still access在我的类实现中声明_data'时.这是否意味着宣称伊娃将归结为一种风格问题,这取决于程序员的自由裁量权?我可以压缩我的代码并删除我的实现中的语句块中的所有ivar声明,并@property在我的私有界面中使用吗?如果不是这样,那么明确宣布伊娃的优点和缺点是什么?

最后,@dynamic.从我可以收集到的,它曾经对编译器说,"嘿编译器,不要自动生成访问器方法,如果你没有找到它的实现,不要担心,我会在运行时提供一个".这一切@dynamic都用于或者还有更多吗?

我只是想澄清所有这些事情,因为它似乎有很多不同的意见,而且没有必要一个正确的答案.此外,随着Objective-C的发展和进步,这些答案将会发生变化,因此有一个简明扼要的最新指南会很好.感谢大家!(如果有什么我可以说得更好或更清楚,请告诉我)

编辑:

总之,我问的是这个:

1)宣布具有现代Objective-C的伊娃需要吗?2)我可以通过使用来实现声明ivars和相应属性的相同效果@property吗?3)@dynamic用于什么?4)我可以完全放弃使用@synthesize或是否有一个好的用例?

在您认为合适的情况下进行投票和投票.

oop objective-c instance-variables

3
推荐指数
1
解决办法
1282
查看次数

核心图形圆形图像模糊

我正在使用核心图形绘制圆形图像,并修改了此SO答案的实现

这是我的来源:

+ (UIImage*)circularImageWithRadius:(CGFloat)radius color:(UIColor*)color{
    CGRect rect = CGRectMake(0.0f, 0.0f, radius*2, radius*2);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillEllipseInRect(context, rect);
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
Run Code Online (Sandbox Code Playgroud)

边缘模糊,我不知道为什么(我认为设备的分辨率无关紧要,它可以直接使用).

我尝试替换CGContextFillEllipseInRect(context, rect);,CGContextFillRect(context, rect);这也很模糊.然后我尝试了CGContextFillRect(context, CGRectMake(0, 0, radius*4, radius*4)它完美,清晰的图像和一切(虽然是一个正方形,而不是一个圆圈).所以我改回去了,CGContextDrawEllipseInRect(context, CGRectMake(0, 0, radius*4, radius*4)但这是我的结果:

在此输入图像描述

而对于矩形,它与使用半径*2时的大小相同,但图像更清晰.

如何修复模糊问题以及为什么不CGContextFillEllipseInRect填充预定义的图像rect?

core-graphics objective-c ios

3
推荐指数
1
解决办法
958
查看次数

ES6 + React组件实例方法

Video在React中制作了一个小组件(因为你猜对了,播放视频),我希望将该组件嵌入到父组件中,然后能够play在视频组件上调用方法.

我的视频组件如下所示:

import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
const { string, func } = PropTypes;

export default class Video extends Component {

  static propTypes = {
    source: string.isRequired,
    type: string.isRequired,
    className: string
  };

  play = () => {

  };

  render = () => {
    const { className } = this.props;
    return (
      <video className={ className } width="0" height="0" preload="metadata">
        <source src={ this.props.source } type={ this.type } />
        Your browser does …
Run Code Online (Sandbox Code Playgroud)

javascript html5 ecmascript-6 reactjs

3
推荐指数
1
解决办法
3828
查看次数

以编程方式静音计算机

我正在为OS X开发一个免费的应用程序,它会按计划将您的计算机静音.它背后的想法是如此,如果你在一个会议或班级,你可以运行该应用程序,并确保它不会发出噪音.问题是,我不知道如何静音系统卷.有帮助吗?

audio macos

2
推荐指数
1
解决办法
809
查看次数

跟踪MKMapView中用户位置注释的选择

我有一个iPhone应用程序,缩放到用户位置的最近城市,我希望用户能够双击userLocation注释,并让地图放大到一个块左右.

如何获取userLocation注释以识别它被点击?

mkmapview mkannotation userlocation ios

2
推荐指数
1
解决办法
1431
查看次数

在ios应用程序中使用@synthesize

我在iOSU开发的iTunesU课程中观看精彩的Paul Haggerty(因为谁不需要刷新基础知识?)他说了一些我不知道的事情:

"我们永远不会访问下划线(_符号)变量"

然后他继续讨论了如何使用@property声明变量,@synthesize variable = _variable是由编译器在幕后生成的代码,以及setter和getter.基本上,代码永远不会出现在您的应用程序中.

在我迄今为止编写的所有iOS应用程序中,我总是@property在我的头文件中声明我的变量.@synthesize VARIABLE_NAME = _VARIABLE_NAME;自从观看讲座以来,我现在很困惑我是否应该@synthesize在我的代码中使用它.

我应该只使用财产声明吗?如果我在代码中使用合成声明,它有什么区别(如果有的话)?

既然Haggerty先生不使用它,那我为什么呢?(考虑到他是一个iOS半神).我非常觉得做我一直在做的事情是不好的形式.

有人关心澄清这个问题吗?

objective-c ios

2
推荐指数
1
解决办法
3028
查看次数

Webpack字体包含问题

我有这个非常有趣的webpack问题,我无法理解为我的生活.

我有像这样的标准font-face声明:

// MarkOT-ExtraLight
@font-face {
  font-family: 'MarkOT-ExtraLight';
  src: require('MarkOT-ExtraLight.eot?#iefix') format('embedded-opentype'),
       require('MarkOT-ExtraLight.otf') format('opentype'),
       require('MarkOT-ExtraLight.woff') format('woff'),
       require('MarkOT-ExtraLight.ttf')  format('truetype'),
       require('MarkOT-ExtraLight.svg#MarkOT-ExtraLight') format('svg');
  font-weight: normal;
  font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)

```

现在我注意到使用require工作正常,除了我的手机上没有加载任何字体.所以我转而require去看看url,这一切都奏效了.

我将我的应用程序部署到heroku,直到我访问我的网站时才发现我的css文件已经发展到57.3 MB2.8 MB.是的,你听到了,57.3 MB.我通过require在我的font-face声明中使用切换到使用url以确认实际发生的情况来测试它三次.

有没有人经历过类似的事情?我在下面包含了我的webpack配置.

var webpack = require('webpack');
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var BrowserSyncPlugin = require('browser-sync-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

//Environment constants

const DEVELOPMENT = "development";
const PRODUCTION = "production";

// Functions for …
Run Code Online (Sandbox Code Playgroud)

css fonts sass heroku webpack

2
推荐指数
1
解决办法
2070
查看次数

获取当前导航控制器的正确方法

鉴于我有rootViewControllerwhich is UIApplication.shared.delegate?.window??.rootViewController,我想获取活动导航控制器(如果有)。

到目前为止,我想出了:

guard var controller = rootViewController?.presentedViewController else { return rootViewController as? UINavigationController }
while let presented = controller.presentedViewController {
    controller = presented
}
controller = controller.navigationController ?? controller
return controller as? UINavigationController
Run Code Online (Sandbox Code Playgroud)

这足够了吗?一个共同工作给了我这个解决方案,但我不明白的部分是rootViewController?.presentedViewController. 不应该rootViewController?.presentingViewController吗?

ios swift

2
推荐指数
1
解决办法
2458
查看次数

如何使用Boost在C++中创建代理服务器

我正在制作一个Web应用程序模糊器,对于我的代理服务器,我正在使用由一个名叫Alex Ott的人开发的开源代码(现在).我注意到,当我从一些网站发出请求时,我们确实想用C++编写自己的代理,但我完全不知道从哪里开始.有人可以向我解释一下吗?

最终目标是能够捕获并将通过代理发出的每个请求写入文件,我已经在做了,但我现在拥有的代理服务器并没有捕获所有这些请求,我知道在那里.

编辑:由于问题不清楚,这里是:我想知道使用Boost扩展库用C++编写的代理服务器的代码是什么.过去四个月的同样问题.

c++ proxy boost

1
推荐指数
1
解决办法
3670
查看次数

Objective-C 中打印对象和对象的区别

NSLog(@"%p", &object);和 有NSLog(@"%p", object);什么区别?

两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。

c objective-c

1
推荐指数
1
解决办法
158
查看次数

Swift嵌套结构访问

我有以下嵌套结构:

public struct Session {
    public enum Type: Int {
        FirstLaunch = 0, NotRegistered, LoggedOut, LoggedIn
    }
}
Run Code Online (Sandbox Code Playgroud)

它非常简单,非常准确.但是,当我尝试访问时FirstLaunch,例如,Xcode会引发以下错误:

'Session.Type.Type' does not have a member named 'FirstLaunch'
Run Code Online (Sandbox Code Playgroud)

任何人都知道发生了什么事吗?

swift

1
推荐指数
1
解决办法
586
查看次数