Стоимость включения заголовочных файлов в Objective C

angular.module('app', []).controller('ctrl', function($scope){
  $scope.data = [
    {Referrer: 'Henry', Amount: 20, Location: 'NY'},
    {Referrer: 'Tom', Amount: 10, Location: 'London'},    
    {Referrer: 'Sam', Amount: 10, Location: 'Paris'},
    {Referrer: 'Henry', Amount: 10, Location: 'NY'},
    {Referrer: 'Tom', Amount: 20, Location: 'London'},    
    {Referrer: 'Henry', Amount: 30, Location: 'NY'}
  ];
  $scope.sum = function(name){
    return $scope.data.filter(function(x) { return x.Referrer == name; })
      .map(function(x) { return x.Amount; }).reduce(function(a, b) { return a + b; });
  }
})
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
.totalRow{
  border-style: solid;  
}
.total{  
  text-align: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js">
</script>

<div ng-app='app' ng-controller='ctrl'>
  <table>
    <thead>
      <tr>
        <th>Referrer</th>
        <th>Location</th>        
        <th>Amount</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-init='next = $index + 1' ng-repeat-start='item in dataSorted = (data | orderBy : "Referrer")'>
        <td>{{item.Referrer}}</td>
        <td>{{item.Location}}</td>
        <td>{{item.Amount}}</td>
      </tr>
      <tr class='totalRow' ng-repeat-end ng-if='!dataSorted[next] || (dataSorted[next].Referrer != item.Referrer)'>
        <td colspan='2' class='total'>Total:</td>        
        <td>{{sum(item.Referrer)}}</td>
      </tr>
    </tbody>
  </table>
</div>

9
задан justin 28 September 2012 в 22:30
поделиться

5 ответов

Компоновщик ничего не знает о #import файлах ed. Фактически, компилятор Objective-C о них тоже ничего не знает, они предварительно обработаны препроцессором. Препроцессор эффективно вставляет содержимое заголовков в точку, которую вы включили в ваш исходный файл. Затем фактическому компилятору Objective-C придется обрабатывать дополнительные прототипы функций и определения интерфейсов классов, даже если они не используются. Хотя обычно это не длинная задача, она может увеличить время компиляции. В результате размер и производительность вашего приложения должны остаться неизменными.

Чтобы увидеть, как выглядит необработанный исходный код (включая все заголовочные файлы, расширенные макросы и т. Д.):

gcc -E your-source-file.m
7
ответ дан 4 December 2019 в 14:31
поделиться

Импорт / включение большего количества заголовочных файлов увеличит время компиляции. Вы можете уменьшить эту боль с помощью предварительно скомпилированных заголовков .

3
ответ дан 4 December 2019 в 14:31
поделиться

Самый большой недостаток - время компиляции. Если все ваши заголовки импортированы в каждый исходный файл, то весь проект придется перестраивать каждый раз, когда вы вносите изменения в файл заголовка.

2
ответ дан 4 December 2019 в 14:31
поделиться

У меня сложилось впечатление, что это не будет слишком большим ударом: http://en.wikipedia.org/wiki/Objective-C#.23import

1
ответ дан 4 December 2019 в 14:31
поделиться

Go ahead and do it. Unless the headers you're including are massive and you're not using precompiled headers, you shouldn't see any difference. As others have said, #import is a preprocessor directive. This has no runtime consequence and in many cases no significant compile time consequence.

0
ответ дан 4 December 2019 в 14:31
поделиться